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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值