Я пишу кроссплатформенное приложение, и мне нужно все доступное дисковое пространство. Для систем posix (Linux и Macos) я использую statvfs. Я создал этот метод С++:
long OSSpecificPosix::getFreeDiskSpace(const char* absoluteFilePath) {
struct statvfs buf;
if (!statvfs(absoluteFilePath, &buf)) {
unsigned long blksize, blocks, freeblks, disk_size, used, free;
blksize = buf.f_bsize;
blocks = buf.f_blocks;
freeblks = buf.f_bfree;
disk_size = blocks*blksize;
free = freeblks*blksize;
used = disk_size - free;
return free;
}
else {
return -1;
}
}
К сожалению, я получаю довольно странные значения, которые не могу понять. Например: f_blocks = 73242188 f_bsize = 1048576 f_bfree = 50393643 ...
Являются ли эти значения битами, байтами или чем-то еще? Я прочитал здесь в stackoverflow, что это должны быть байты, но тогда я бы получил общее количество свободных байтов: f_bsize*f_bfree = 1048576*50393643, но это означает 49212,542 ГБ... слишком много...
Я делаю что-то не так с кодом или что-то еще? Спасибо!