gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:25 25 4
gpt4 key购买 nike

#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 |磁盘大小:4.00 KB

并且值更改为-89370624

然后复制文件得到-89374720这些数字没有任何意义。不知道我做错了什么。当我运行 df -h 这就是我得到的结果

enter image description here

最佳答案

要确保您没有遇到算术溢出,也没有格式字符串不匹配,请显式使用 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 的返回值以确保这些值确实有意义。如果出现错误,它们将无济于事。

关于c - Linux 中的可用(免费)磁盘空间显示负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50456868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com