2009-09-28 84 views

回答

8

在Linux上,如果你不担心可移植性(C不知道驱动器,因此任何这样的特定代码将是不可移植),使用statfs()

struct statfs fsb; 

    if(statfs("/mnt", &fsb) == 0) 
    printf("device has %ld blocks, each %ld bytes\n", fsb.f_blocks, fsb.f_bsize); 
+1

如果传递给statfs的路径是“/ mnt” – Andrew 2009-09-28 14:44:54

0

如果您在使用外部工具没有问题,exec的这样:

df -h | grep -i /dev/sda1

使用popen,并与strtok的解析结果行。

+0

我想避免做那样的事情。该应用程序在嵌入式平台上运行,并且需要太多资源才能完成上述操作。 – Andrew 2009-09-28 14:37:19

+1

'-h'在这里可能是不必要的,因为输入将被程序读取。由于区分大小写,'-i'也是多余的。除此之外 - 一个很好的符合LSB的(即便携式)解决方案。 – 2009-09-28 14:37:49

2

读取并解析了一些设备的sysfs条目。在你的情况,

  1. 全面的设备(所有分区和分区表):/sys/block/sda/size
  2. 此设备上的逻辑分区:/sys/block/sda/sda1/size

的设备没有被安装还。

相关问题