LINUX.ORG.RU

Определить размер доступного места на диске (statvfs)

 , ,


1

1

Есть вот такой вот код:

char* fnPath = "/";
const unsigned int GB = (1024 * 1024) * 1024;
struct statvfs buffer;
int ret = statvfs(fnPath, &buffer);
if (!ret) {
    const double available = (double)(buffer.f_bavail * buffer.f_frsize) / GB;
    printf("Available: %f --> %.0f\n", available, available);
}

Пытаюсь определить размер доступного места на диске. Проверяю на маке и iOS. Не совпадаем с теми значениями что находятся в настройках ос. Получается приблизительно меньше на 3Гб и там и там. Может есть какая-то хитрость?


Ответ на: комментарий от vzzo

Интересная мысль, только как мне это починить из плюсов?

ECLIPSE
() автор топика
unsigned long  f_bsize;    /* Filesystem block size */
unsigned long  f_frsize;   /* Fragment size */
fsblkcnt_t     f_bavail;   /* Number of free blocks for unprivileged users */

blocks
block size
fraagment size

Т.е. надо так:

buffer.f_bavail * buffer.f_bsize

xaizek ★★★★★
()
Ответ на: комментарий от vzzo

Это было бы при использовании f_bfree, f_bavail уже исключает зарезервированное пространство. Тут не на тот размер умножили.

xaizek ★★★★★
()
Ответ на: комментарий от ECLIPSE

Что интересно результат моей программы и df -h совпадает.

➜  ix git:(Oleg/MDI-315) ✗ df -h                                                                                                                                                                   [18/05/6| 9:44PM]
Filesystem                             Size   Used  Avail Capacity iused               ifree %iused  Mounted on
/dev/disk1s1                          233Gi  195Gi   34Gi    86% 3125941 9223372036851649866    0%   /
devfs                                 204Ki  204Ki    0Bi   100%     706                   0  100%   /dev
➜  ix git:(Oleg/MDI-315) ✗

ECLIPSE
() автор топика
Ответ на: комментарий от ECLIPSE

Это что-то не то.

Разве? 37.7GB ~= 35GiB всегда так было.

uCore
()
Ответ на: комментарий от xaizek

Если делать так, то получается 39769.933594 Gb. Тоже не понятно.

ECLIPSE
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.