df和statfs的输出不同
为什么df命令和statfs()系统调用值的输出不同:
调用statfs的程序:
#include #include #include #include #include #include int main() { struct statfs vfs; if (statfs("/", & vfs) != 0) { fprintf(stderr, "%s: statfs failed: %s\n", "/", strerror(errno)); exit(0); } printf("mounted on %s:\n","/"); printf("\tf_bsize: %ld\n", vfs.f_bsize); printf("\tf_blocks: %ld\n", vfs.f_blocks); printf("\tf_bfree: %ld\n", vfs.f_bfree); printf("\tf_bavail: %ld\n", vfs.f_bavail); printf("\tf_files: %ld\n", vfs.f_files); printf("\tf_ffree: %ld\n", vfs.f_ffree); return 0; }
输出:
镶嵌在 /: f_bsize:4096 f_blocks:119189762 f_bfree:112718672 f_bavail:106662506 f_files:30285824 f_ffree:29990111
输出df命令:
〜$ df / 文件系统1K块使用可用使用%挂载 / dev / sda1 476759048 25882620 426651764 6%/
df命令在内部调用statfs系统调用本身,但为什么输出结构值和df命令的输出不同,任何人都可以清楚地解释我。
df的数据可能基于f_bavail
,而不是f_bfree
所以对于总空间的计算和可用空间可能如下
long long Total_Space = vfs.f_blocks; Total_Space *= vfs.f_frsize; Total_Space /= 1024; long long Avail_Space = vfs.f_bfree; Avail_Space *= vfs.f_frsize; Avail_Space /= 1024; printf("Total Space=%lldKb Available Space=%lldKB\n",Total_Space,Avail_Space);