2009-09-28 88 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

的設備沒有被安裝還。

相關問題