Statfs возвращает странные значения

1

В настоящее время я пытаюсь получить дисковое пространство в байтах en used space в байте с statfs(). Я сделал небольшую функцию, но я получаю действительно странные значения. (Я работаю над 32-битной системой ubuntu)

Вот код:

bool
CheckDiskSpace( const CLString &devPath, ulonglong &diskSize, ulonglong &totalFreeBytes )
{
bool retVal = false;
struct statfs fs;
if( ( statfs( devPath.c_str(), &fs ) ) < 0 ) {
    printf( "Failed to stat %s: %s\n", devPath.c_str() ,strerror( errno ) );
    return false;
} else {
    diskSize = fs.f_blocks * fs.f_bsize;
    totalFreeBytes = fs.f_bfree * fs.f_bsize;
    retVal = true;
}
return retVal;
}

int main()
{
  ulonglong diskSize, totalFreeBytes;
  CheckDiskSpace( "/dev/sda5", diskSize, totalFreeBytes );
  printf( "Disk size: %llu Byte\n", diskSize );
  printf( "Free size: %llu Byte\n", totalFreeBytes );
}

И я получаю:

Disk size: 1798447104 Byte
Free size: 1798443008 Byte

Я действительно не понимаю этого результата, потому что с командой "df" я получаю:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda5            111148848  47454952  58047832  45% /
udev                   1756296         4   1756292   1% /dev
tmpfs                   705324       912    704412   1% /run
none                      5120         0      5120   0% /run/lock
none                   1763300      1460   1761840   1% /run/shm

Любая помощь очень популярна!

PS: У меня есть 120 ГБ ssd, а мой раздел находится в Ext4.

EDIT: ulonglong - это предпределенный тип:

typedef unsigned long long ulonglong;
  • 0
    Ты прав. Готово !
  • 0
    почему вы возвращаете истину / ложь, если вы даже не проверяете их?
Показать ещё 3 комментария
Теги:

2 ответа

2
Лучший ответ

Вы получаете результат для tmpfs, установленного на /dev когда /dev/sda5 находится в этой файловой системе. Если вы хотите знать свою корневую файловую систему, просто используйте / или любой путь не в /dev и /run.

  • 0
    Это именно то, что я думал, и я уже попробовал это, но результат такой же странный, как и предыдущий: Размер диска: 2147270656 Байт Свободный размер: 795549696 Байт. И я думаю, что это неверно, потому что он дает мне 1,99980163574219 гигабайт дискового пространства.
  • 0
    Что ты имеешь в виду как странный? Если это не то же самое значение, вероятно, это потому, что вы подсчитываете байты и df печатает его в блоке размером 1 КБ. Попытка деления на 1024.
Показать ещё 9 комментариев
0

я думаю, что вы хотите:

CheckDiskSpace( "/dev/sda5", &diskSize, &totalFreeBytes );

потому что diskSize и totalFreeBytes не изменены в CheckDiskSpace с кодом

  • 0
    Я знаю, это потому, что это всего лишь некоторые части моего кода. В полном коде они изменены.
  • 0
    @fazo они передаются как ссылки, это C ++.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню