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 值以确保这些值确实有意义。如果出现错误,它们将无济于事。
#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 值以确保这些值确实有意义。如果出现错误,它们将无济于事。