土曜日, 2月 02, 2008

statfsでディスクのサイズを知る@linux

linuxのソフト開発メモ。

リムーバブルストレージの最大容量分のログの保存のために、最初にログ保存可能件数を計算する必要があった。
dfコマンドつかって、シェルで処理しようかと思っていたが、statfsというシステムコール関数があることを発見。
dfコマンドはこのシステムコールを使用しているらしい。

で、早速テストプログラムを作成し、動作の確認。

マウントしたディレクトリの単位で調べられるので結構他にも使えるかも。

#include
#include
#include
#include

int main()
{
int i,j,k,n;
struct statfs buf;
// statfs("/", &buf );
statfs("/mnt/usb", &buf );
i = buf.f_bsize / 1000 ;
j = buf.f_bfree * i / 1024;
n = buf.f_blocks * i / 1024;
printf("free %d M bytes \n", j );
k = buf.f_bavail * i / 1024;
printf("I can use %d M bytes \n", k );
printf("Disk size %d M bytes \n",n);
printf("test\n");
exit(0);
}