我遇到了一个程序问题,该程序应将任何用户可用的可用磁盘空间发送给我。

我的目标是获取没有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时,我可以看到可用空间是25Gsda330Gsda1
这似乎完全不准确。

我一直在Stackoverflow的帖子中运行,看到的是混合解决方案,但没有一个令人满意。如何获得以可用字节为单位的正确值?

编辑:完整的statvfsdf /输出
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/

10-16 06:59