У меня возникла проблема с программой, которая должна вернуть мне свободное место на диске, доступное любому пользователю.
Моя цель — получить все свободное дисковое пространство всех разделов моего жесткого диска, которое может использовать любой, у кого нет прав 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% /