FatFs - f_getfree

## f_getfree

ボリューム上の空き領域のサイズを取得します。

    FRESULT f_getfree (
      const TCHAR* path,  /* [IN] 対象ドライブを指定します */
      DWORD* nclst,       /* [OUT] 空きクラスタ数を格納する変数へのポインタ */
      FATFS** fatfs       /* [OUT] ファイル システム オブジェクトを指すポインタへのポインタ */
    );

#### 引数

path
  調べる対象の論理ドライブを示すパス名を示すヌル文字`'\0'`終端の文字列へのポインタを指定します。ヌル文字列はカレント ドライブを意味します。
nclst
  空きクラスタ数を格納する`DWORD`型変数へのポインタを指定します。
fatfs
  対象ドライブのファイル システム オブジェクトを指すポインタが返されます。

#### 戻り値

FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT

#### 解説

論理ドライブ上の空き領域のサイズをクラスタ単位で取得します。返されたファイル システム オブジェクトの`csize`メンバがクラスタあたりのセクタ数を示しているので、これを元にセクタ単位の空きサイズが計算できます。FAT32ボリュームにおいては、FSINFOの情報が実際の空きクラスタ数と同期していない場合、不正確な値を返す可能性があります。この問題を避けるため、`_FS_NOFSINFO`オプションでマウント後の初回は必ずフルFATスキャンをするように構成することもできます。

#### 対応情報

`_FS_READONLY == 0`で、且つ`_FS_MINIMIZE == 0`のとき使用可能です。

#### 使用例

        FATFS *fs;
        DWORD fre_clust, fre_sect, tot_sect;

        /* ドライブ1のボリューム情報と空きクラスタ数を得る */
        res = f_getfree("1:", &fre_clust, &fs);
        if (res) die(res);

        /* 全セクタ数と空きセクタ数を計算 */
        tot_sect = (fs->n_fatent - 2) * fs->csize;
        fre_sect = fre_clust * fs->csize;

        /* ボリュームのサイズと空きサイズを表示 (512バイト/セクタと仮定) */
        printf("%10lu KiB total drive space.\n%10lu KiB available.\n",
               tot_sect / 2, fre_sect / 2);

#### 参照

`FATFS`

戻る