Я пишу кроссплатформенное приложение, и мне нужно общее доступное дисковое пространство.Для систем posix (Linux и Macos) я использую statvfs.Я создал этот метод C ++:
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.542GB ... слишком много ...
AmЯ делаю что-то не так с кодом или что-то еще?Спасибо!