#include <sys/statvfs.h>

int GET_DISK_SPACE()
{
  struct statvfs sbuf;
  statvfs("/home/odroid", &sbuf);
  printf("Bytes left:%ld\n", sbuf.f_frsize*sbuf.f_bavail);

}

编写这个简单的函数来获取linux机器上的磁盘空间,它返回负值。
原件:-89366528
然后我添加了一个简单的文本文件,大小为:877 bytes | Size on disk: 4.00 KB
值更改为-89370624
然后复制文件并得到-89374720
这些数字毫无意义。不知道我做错了什么。
当我跑的时候这就是我得到的
c - Linux中的可用(免费)磁盘空间是否显示为负?-LMLPHP

最佳答案

要确保没有出现算术溢出,并且格式字符串不匹配,请显式使用long long

unsigned long long num_bytes = sbuf.f_bsize;
num_bytes *= sbuf.f_bavail;
printf("Bytes available: %llu\n", num_bytes);

只要表达式的类型依赖于结构成员类型(即typedef),就不可能选择正确的格式字符串。由于printf是varargs,编译器不会自动转换为正确的类型。引入helper变量可以让您绝对确定传递给printf的参数的宽度。
另外,检查statvfs的返回值,以确保这些值实际上意味着什么。如果你犯了错,那就没什么用了。

10-08 14:34