获取硬盘信息:
现在,我们已经可以知道硬盘数量、硬盘的设备名称、分区数及分区的设备名称。那么,怎么才能知道这些设备的信息呢?比如硬盘大小、扇区大小、分区大小、分区已经使用的大小等等。
关于硬盘的信息,在fdisk的源码中也可以找到相关的源码。实例代码如下:
#include <stdio.h>
#include <errno.h>
int GetDiskCount()
{
FILE* f = fopen("/proc/partitions", "r");
if (!f)
{
fprintf(stderr, "fopen /proc/partitions failed!errno=%d\n", errno);
return 0;
}
char line[100], ptname[100], devname[120], *s;
int ma, mi, sz;
int nDiskCount = 0;
while (fgets(line, sizeof(line), f))
{
if (sscanf(line, " %u %u %u %[^\n ]",
&ma, &mi, &sz, ptname) != 4)
continue;
for (s = ptname; *s; s++)
continue;
/* note: excluding ‘0‘: e.g. mmcblk0 is not a partition name! */
if (s[-1] >= ‘1‘ && s[-1] <= ‘9‘)
continue;
nDiskCount++;
}
fclose(f);
return nDiskCount;
}
int main(int argc, char * argv[])
{
printf("DiskCount: %d\n", GetDiskCount());
return 0;
}
其实,就是通过打开设备文件然后分别调用ioctl来获取硬盘的大小、扇区大小、CHS信息等等。程序运行结果如下:
user:~/$sudo ./diskinfo /dev/sda
Disk /dev/sda infomation:
Size: 42949672960 Bytes 40.00 GB
SectorSize: 512 Bytes
heads: 255
sectors: 63
cylinders: 5221
start: 0
原文:http://blog.csdn.net/yuesichiu/article/details/9396447