3
我試圖使用statvfs來查找文件系統上的可用空間。statvfs問題 - 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 2011-01-11 18:12:37