3
ファイルシステム上の空きスペースを見つけるためにstatvfsを使用しようとしています。statvfs issue - printf/debugger
ここでは、コードです:デバッガで
const char* Connection::getDiskInfo()
{
struct statvfs vfs;
int nRet = statvfs("/u0", &vfs);
if(nRet) return NULL;
char* pOut = (char*)malloc(256);
memset(pOut, 0, 256);
sprintf(pOut, "<disk letter='%s' total='%lu' free='%lu' totalfree='%lu'/>",
"/", (vfs.f_bsize * vfs.f_blocks)/(1024 * 1024),
(vfs.f_bsize * vfs.f_bavail)/(1024 * 1024),
(vfs.f_bsize * vfs.f_bfree )/(1024 * 1024));
return pOut;
}
(NetBeansの6.9)私はに、statvfs構造体のために適切な値を参照してください。
f_bavail = 105811542
f_bfree = 111586082
f_blocks = 111873644
f_bsize = 4096
これは私の合計= 437006を与える必要がありますが、私の出力は主張がその合計は2830です。明らかに私の書式や数学で無知なことをしています。
私は行を追加した場合:デバッガが私に適切な値を(上記参照)を示しながら
unsigned long x = (vfs.f_bsize * vfs.f_blocks);
xは2967912448に評価されます。
システム:Linuxバージョン2.6.18-194.17.1.el5PAE
i386の
私は、この関数を参照すること、ここで他のエントリを読んで、彼らはそれが非常に簡単に見えるよう。だから私はどこに迷いましたか?
それでした。私はsprintfのすべてのヴァースをunsigned long long intにキャストしなければならなかった。 – ethrbunny