c++ - statfsが奇妙な値を返す

c++ linux unix

私は現在、statfs()を使用して、バイト単位のディスク領域とバイト単位の使用済み領域を取得しようとしています。
小さな関数を作成しましたが、非常に奇妙な値が得られます。
(私はubuntu 32ビットシステムで作業しています)

これがコードです:

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 GBのSSDがあり、パーティションはExt4にあります。

編集:ulonglongは事前定義されたタイプです:

typedef unsigned long long ulonglong;
答え
/devがそのファイルシステム上にあるため、/dev/sda5にマウントされたtmpfsの結果を取得しています。ルートファイルシステムについて知りたい場合は、/または/devにも/runにもないパスを使用してください。
関連記事

c++ - C++の配列で可能な組み合わせのすべての合計をリストする方法は?

c++ - SDLを使用したゲームのコードの編成

c++ - MSVS2010で左辺値を右辺値参照にバインド

c++ - C++は、括弧付きまたは括弧なしのデフォルトコンストラクターを呼び出します[重複]

c++ - 「Microsoft C++ Visual Runtime Library:Runtime error!」とは

c++ - OpenCL:GPUではなくCPUで正しい結果:メモリを正しく管理する方法?

c++ - Qtコンパイル-Windowsでのqmakeの使用

c++ - libsshの静的ライブラリにより、vc10で未解決のシンボルが発生する

c++ - C++でのゼロへの明示的な静的初期化

c++ - Visual Studio C++でプロジェクトをコンパイルするときにオブジェクトファイル「.o」を生成する