Statfs возвращает странные значения - PullRequest
1 голос
/ 15 января 2012

В настоящее время я пытаюсь получить дисковое пространство в байтах и ​​используемое пространство в байтах с помощью 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: у меня есть ssd на 120 ГБ, и мой раздел находится в Ext4.

РЕДАКТИРОВАТЬ: ulonglong является предопределенным типом:

typedef unsigned long long ulonglong;

Ответы [ 2 ]

2 голосов
/ 15 января 2012

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

0 голосов
/ 15 января 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...