#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
时,这就是我得到的
答案 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
的返回值,以确保这些值实际意味着什么。如果你有错误,他们就不会有任何好处。