我遇到了一个程序问题,该程序应该将任何用户都可以使用的可用磁盘空间发回给我。
我的目标是让没有 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
forsda3
和30G
forsda1
这似乎完全不准确。
我一直在 Stackoverflow 上运行帖子,混合我看到的解决方案,但没有一个令人满意。如何获得可用可用空间的正确值(以 MB 为单位)?
编辑:完整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% /