f_bfree和f_bavail的区别
2014-04-14 13:17
381 查看
Linux系统开发中,在使用statfs统计分区空间时,要注意f_bfree和f_bavail两个值的区别。
实验一下:
以/boot分区为例,上面使用C代码查看分区信息,下面使用系统命令df查看分区信息
![](http://s3.51cto.com/wyfs02/M00/24/0D/wKioL1NLb5XxU63RAABovylfJBg163.jpg)
![](http://s3.51cto.com/wyfs02/M02/24/0C/wKiom1NLb-6it8iEAABNIOW5AEI907.jpg)
可以看到f_bfree和f_bavail两个值的区别,前者是硬盘所有剩余空间,后者为非root用户剩余空间。一般ext3文件系统会给root留5%的独享空间。所以如果计算出来的剩余空间总比df显示的要大,那一定是你用了f_bfree。 5%的空间大小这个值是仅仅给root用的,普通用户用不了,目的是防止文件系统的碎片。
本文出自 “老徐的私房菜” 博客,谢绝转载!
实验一下:
以/boot分区为例,上面使用C代码查看分区信息,下面使用系统命令df查看分区信息
#include <stdio.h> #include <sys/vfs.h> int main() { struct statfs sfs; int i = statfs("/boot", &sfs); int percent = (sfs.f_blocks - sfs.f_bfree ) * 100 / (sfs.f_blocks - sfs.f_bfree + sfs.f_bavail) + 1; printf("/dev/sda1 %ld %ld %ld %d%% /boot\n", 4*sfs. f_blocks, 4*(sfs.f_blocks - sfs.f_bfree), 4*sfs.f_bavail, percent); system("df /boot "); return 0; }
![](http://s3.51cto.com/wyfs02/M00/24/0D/wKioL1NLb5XxU63RAABovylfJBg163.jpg)
#include <stdio.h> #include <sys/vfs.h> int main() { struct statfs sfs; int i = statfs("/boot", &sfs); int percent = (sfs.f_bfree - sfs.f_bavail ) * 100 / sfs.f_blocks; printf("/dev/sda1 free=%ld avail=%ld block=%ld block-free=%ld percent=%d%% /boot\n", 4*sfs. f_bfree, 4*sfs. f_bavail, 4*sfs. f_blocks, 4*(sfs.f_bfree - sfs.f_bavail), percent); return 0; }
![](http://s3.51cto.com/wyfs02/M02/24/0C/wKiom1NLb-6it8iEAABNIOW5AEI907.jpg)
可以看到f_bfree和f_bavail两个值的区别,前者是硬盘所有剩余空间,后者为非root用户剩余空间。一般ext3文件系统会给root留5%的独享空间。所以如果计算出来的剩余空间总比df显示的要大,那一定是你用了f_bfree。 5%的空间大小这个值是仅仅给root用的,普通用户用不了,目的是防止文件系统的碎片。
本文出自 “老徐的私房菜” 博客,谢绝转载!
相关文章推荐
- malloc calloc realloc 区别
- http代理服务器和sock5代理服务器的区别
- Oracle 10g各版本之间的区别
- Delphi中Self和Sender的区别
- PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
- abstract class和interface有什么区别?
- zImage和uImage的区别
- #define与typedef的区别
- can,could,may,might,will,would的区别
- ViewBag、ViewData 和 TempData 的区别 及 Dynamically Typed Object 动态类型介绍
- html中事件调用JavaScript函数时有return与没有return的区别
- java int 与Integer区别
- 总结了Struts1与Struts2的12点区别
- ios view的frame和bounds之区别(位置和大小)
- left join 和 left outer join 的区别
- Windows补丁GDR与QFE的区别
- Runtime.getRuntime.exec(String)与exec(String[])的区别
- 关于==与equals()区别
- VB中的+与&符号的区别
- C++中delete和delete[]的区别【转载】