Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 调用statvfs和df命令之间存在差异_Linux_File - Fatal编程技术网

Linux 调用statvfs和df命令之间存在差异

Linux 调用statvfs和df命令之间存在差异,linux,file,Linux,File,当我在Linux机器上使用statvfs命令获取挂载文件系统上的可用空间时,得到的数字与df报告的数字略有不同 例如,在我有一台500G硬盘的机器上,我从df获得以下输出: # df --block-size=1 --no-sync Filesystem 1B-blocks Used Available Use% Mounted on /dev/md0 492256247808 3422584832 463828406272 1% / t

当我在Linux机器上使用statvfs命令获取挂载文件系统上的可用空间时,得到的数字与df报告的数字略有不同

例如,在我有一台500G硬盘的机器上,我从df获得以下输出:

# df --block-size=1 --no-sync
Filesystem           1B-blocks      Used Available Use% Mounted on
/dev/md0             492256247808 3422584832 463828406272   1% /
tmpfs                2025721856         0 2025721856   0% /lib/init/rw
varrun               2025721856    114688 2025607168   1% /var/run
varlock              2025721856      4096 2025717760   1% /var/lock
udev                 2025721856    147456 2025574400   1% /dev
tmpfs                2025721856     94208 2025627648   1% /dev/shm

调用statvfs会得到4096个块大小和119344155个可用块,因此应该有488833658880个字节可用。然而,df报告有463828406272个字节可用。为什么这里会有差异?

由于您的差异接近5%[1],这是分配给root的默认百分比,因此您有可能将df结果与statvfs和 不使用->f_bavail,这是df使用的

[1] :(488833658880-463828406272)/492256247808=0.0508
#include <stdio.h>
#include <sys/statvfs.h>
int main(){
    struct statvfs stat;
    int a=statvfs("/",&stat);
    printf("total free disk space of the partition: %d GB \n",(stat.f_bavail)*8/2097152);
    //512 is 2^9 - one half of a kilobyte. 
    //A kilobyte is 2^10. A megabyte is 2^20. A gigabyte is 2^30. A terabyte
    //is 2^40. And so on. The common computer units go up by 10's of powers
    //of 2 like that.
    //So you need to divide by 2^(30-9) == 2^21 == 2097152 to get gigabytes.
    //And multiply by 8 because 1 byte=8bit
    return 0;
}
#包括 int main(){ 结构国家统计局; int a=国家公务员(“/”,&stat); printf(“分区的总可用磁盘空间:%d GB\n”,(stat.f_bavail)*8/2097152); //512是2^9—半千字节。 //千字节等于2^10。兆字节等于2^20。千兆字节等于2^30。兆字节等于1 TB //是2^40。以此类推。普通的计算机单位增加10的幂 //像这样的两个人。 //所以你需要除以2^(30-9)==2^21==2097152得到千兆字节。 //并乘以8,因为1字节=8比特 返回0; }
我这样做是因为我更喜欢用Gb表示的结果,但是你可以修改单位来改变指数。第一个答案是真的,正如你所看到的,我也使用了它。是的,使用f_bavail,数字是相同的。非常感谢您提供的信息。我发现在计算免费服务的百分比时存在差异。当我计算(f_bavail*100.0)/f_块时,我预计会有(100-来自df的使用百分比)。然而,这是4%。如果我使用f_bfree,误差会更大。