用statfs函式模擬df功能
阿新 • • 發佈:2019-02-01
statfs結構中可用空間塊數有兩種f_bfree和 f_bavail,前者是硬碟所有剩餘空間,後
者為非root使用者剩餘空間,ext3檔案系統給root使用者分有5%的獨享空間,所以這裡是不
同的地方。這裡要強調的是每塊的大小一般是4K(×這句話錯誤,不一定都是4k,正確做法是:總大小= sfs.f_blocks×f_bsize,即塊數×每塊的大小,單位是bytes,也就是要/1024/1024/1024才是GB單位,另外要注意的問題是sfs.f_blocks×f_bsize資料過大溢位,可以sfs.f_blocks/1024×f_bsize/1024=MB單位)。因此,要實現與df結果一致的就得在
獲得塊數上乘以4,這樣已用、可用、總塊數就可以實現。如果還要實現百分比一致,
那麼要注意的是,df命令獲得是整數百分比,沒有小數,這裡使用的進一法,而不是四
舍五入法。所以在程式裡直接+1取整。
disk_size = sfs.f_blocks/1024*sfs.f_bsize/1024;//MB總大小
avilable =sfs.f_bavail/1024*sfs.f_bsize/1024;//MB可以空間大小
double all=sfs.f_blocks - sfs.f_bfree + sfs.f_bavail;
if(0!=all)
percent = (sfs.f_blocks - sfs.f_bfree ) * 100 / all + 1;可用百分比