Linux 中的可用(免费)磁盘 Space 显示负值?

Available(Free) Disk Space in Linux shows negative?

#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 机器上的磁盘 space 并且它 returns 负值。 原文:-89366528

然后我添加了一个简单的文本文件,大小为:877 bytes | Size on disk: 4.00 KB

并且值更改为 -89370624

然后复制文件得到-89374720 这些数字没有任何意义。不知道我做错了什么。 当我 运行 df -h 这就是我得到的

为确保您没有遇到算术溢出,也没有格式字符串不匹配,请明确使用 long long

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

只要表达式的类型依赖于结构成员类型,即 typedef,就不可能选择正确的格式字符串。由于 printf 是可变参数,编译器不会自动转换为正确的类型。引入辅助变量可以让您绝对确定传递给 printf.

的参数的宽度

此外,检查 statvfs 中的 return 值以确保这些值确实有意义。如果出现错误,它们将无济于事。