我遇到了一个程序问题,该程序应将任何用户可用的可用磁盘空间发送给我。
我的目标是获取没有sudo权限的任何人都可以使用的硬盘驱动器每个分区的所有可用磁盘空间。
所以我尝试了这个:
int main() {
struct statvfs diskData;
statvfs("/", &diskData);
unsigned long long available = (diskData.f_favail + diskData.f_bavail) * diskData.f_frsize) / (1024 * 1024)
std::cout << "Free Space : " << available << std::endl;
}
这总共给了我2810 ...
但是,当我输出
df -h
时,我可以看到可用空间是25G
的sda3
和30G
的sda1
这似乎完全不准确。
我一直在Stackoverflow的帖子中运行,看到的是混合解决方案,但没有一个令人满意。如何获得以可用字节为单位的正确值?
编辑:完整的
statvfs
和df /
输出statvfs
:Block Size : 4 096
Fragment Size : 4 096
Blocks : 9 612 197
Free Blocks : 7 009 166
Non Root Free Blocks : 6 520 885
Inodes : 2 444 624
Free Inodes Space : 2 137 054
Non Root Free Inodes : 2 137 054
File System ID : 4 224 884 198
Mount Flags : 4 096
Max Filename Length : 255
df /
:Filesystem 1K-Blocks Used Available Use% Mounted on
/dev/sda3 38 448 788 10 412 112 26 083 556 29% /
最佳答案
似乎正确使用的值是片段大小,而不是块大小(即f_frsize)
你试过了吗
diskData.f_bavail * diskData.f_frsize
相反?
关于c++ - 获取真正的可用空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15952283/