0
#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这就是我得到的

在此处输入图像描述

4

1 回答 1

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是可变参数,编译器不会自动转换为正确的类型。引入辅助变量可以让您绝对确定传递给printf.

另外,检查返回值statvfs以确保这些值确实有意义。如果您遇到错误,它们将无济于事。

于 2018-05-21T21:48:04.543 回答