Linux中的可用(免费)磁盘空间显示为负数?

时间:2018-05-21 21:30:59

标签: c linux diskspace odroid

#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 这些数字没有任何意义。不确定我做错了什么。 当我运行df -h时,这就是我得到的

enter image description here

1 个答案:

答案 0 :(得分:2)

为确保您没有遇到算术溢出,并且没有格式字符串不匹配,请明确使用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,编译器不会自动转换为正确的类型。引入辅助变量使您可以绝对确定传递给printf的参数的宽度。

另外,检查statvfs的返回值,以确保这些值实际意味着什么。如果你有错误,他们就不会有任何好处。