すべてのユーザーが使用できるディスクの空き容量を返す必要があるプログラムに問題があります。
私の目標は、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
forであることがわかりますsda1
これは完全に不正確なようです。
私は Stackoverflow の投稿を実行し、見たソリューションを組み合わせましたが、満足できるものはありませんでした。使用可能な空き容量のメガバイト単位で正しい値を取得するにはどうすればよいですか?
EDIT:フル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% /