1. 程式人生 > >用statfs函式模擬df功能

用statfs函式模擬df功能

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;可用百分比