会计考友 发表于 2012-8-4 12:13:19

linux认证辅导:Linux下如何获取磁盘信息

熟悉Linux的都知道,Linux下硬盘的命名规则是had、hdb…sda、sdb之类的。但是,如何才能知道机器上到底有多少块硬盘呢?
    刚开始,我以为/dev目录下会有所体现结果我发现设备文件存在并不代表这个设备。那么怎么办才好呢。后来我发现fdisk可以得到硬盘的数量。于是就阅读了一下fdisk的源代码。果然找到了Linux获取硬盘数量的方法。实例代码如下:
    #include
    #include
    int GetDiskCount()
    {
    FILE* f = fopen("/proc/partitions", "r");
    if (!f)
    {
    fprintf(stderr, "fopen /proc/partitions failed!errno=%d\n", errno);
    return 0;
    }
    char line, ptname, devname, *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]

会计考友 发表于 2012-8-4 12:13:20

linux认证辅导:Linux下如何获取磁盘信息

获取硬盘信息:
    现在,我们已经可以知道硬盘数量、硬盘的设备名称、分区数及分区的设备名称。那么,怎么才能知道这些设备的信息呢?比如硬盘大小、扇区大小、分区大小、分区已经使用的大小等等。
    关于硬盘的信息,在fdisk的源码中也可以找到相关的源码。实例代码如下:
    #include
    #include
    int GetDiskCount()
    {
    FILE* f = fopen("/proc/partitions", "r");
    if (!f)
    {
    fprintf(stderr, "fopen /proc/partitions failed!errno=%d\n", errno);
    return 0;
    }
    char line, ptname, devname, *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]
页: [1]
查看完整版本: linux认证辅导:Linux下如何获取磁盘信息