2009-09-28 14 views

答えて

8

、あなたは移植性を心配していないのであれば(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

0

popenを使用して

df -h | grep -i /dev/sda1

を、そしてはstrtokと結果の行を解析。 Linuxの

+0

私はそのようなことを避けようとしています。アプリケーションは組み込みプラットフォーム上で実行されており、上記を実行するにはあまりにも多くのリソースが必要になります。 – Andrew

+1

入力がプログラムによって読み込まれるので、 '-h'はここではおそらく必要ありません。 '-i'も大文字と小文字の区別があるため冗長です。それ以外にも、LSBに準拠した(つまりポータブルな)ソリューションです。 –

2

読むとに番号を解析デバイスのsysfsエントリ。あなたのケースでは、

  1. 全デバイス(すべてのパーティションおよびパーティションテーブル):このデバイス上の/sys/block/sda/size
  2. 論理パーティション:/sys/block/sda/sda1/size

は、デバイスがまだマウントされている必要はありません。

関連する問題