【发布时间】:2018-05-21 21:30:58
【问题描述】:
#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 这就是我得到的
【问题讨论】:
-
应该是
%lu而不是%ld。 -
哦,
int GET_DISK_SPACE()没有return任何东西。 -
这种乘法
sbuf.f_frsize*sbuf.f_bavail也使得大多数现代系统上的数字非常大。为什么要将大小乘以可用空间? -
@FredLarson 更改为无符号,我得到 4205584384,即 3GB,但 df -h 显示其中一个目录至少有 24G 可用。我的代码不正确吗?
-
f_frsize*sbuf.f_bavail没有意义...