gpt4 book ai didi

c++ - 获得真正的免费可用空间

转载 作者:行者123 更新时间:2023-11-30 01:59:40 25 4
gpt4 key购买 nike

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

我的目标是让没有 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对于 sda330G对于 sda1

这似乎完全不准确。

我一直在运行 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% /

最佳答案

这似乎是可用磁盘空间的更准确度量:

unsigned long long available = (diskData.f_bavail * diskData.f_bsize) / (1024 * 1024);

它与我系统上 df 的输出非常匹配(df 以演出为单位显示大小,并可能对其进行四舍五入)。

如果你想要像 df 这样的演出输出,你可以使用这个:

#include <sys/statvfs.h>
#include <stdio.h>

unsigned long rounddiv(unsigned long num, unsigned long divisor) {
return (num + (divisor/2)) / divisor;
}

int main() {
struct statvfs diskData;
statvfs("/home", &diskData);
unsigned long available = diskData.f_bavail * diskData.f_bsize;
printf("Free Space : %luG\n", rounddiv(available, 1024*1024*1024));
return 0;
}

我系统上的输出:
可用空间:31G

如果我运行 df -h/home:

Filesystem            Size  Used Avail Use% Mounted on
181G 141G 31G 83% /home

关于c++ - 获得真正的免费可用空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15952283/

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