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

你可能感兴趣的:(用statfs函数模拟df功能)