FatFs - f_getfree

## f_getfree

The f_getfree function gets number of the free clusters.

    FRESULT f_getfree (
      const XCHAR* Path,        /* Root directory of the drive */
      DWORD* Clusters,          /* Pointer to the variable to store number of free clusters */
      FATFS** FileSystemObject  /* Pointer to pointer to file system object */
    );

#### Parameters

Path
  Pinter to the null-terminated string that specifies the root directory of the logical drive.
Clusters
  Pointer to the DWORD variable to store number of free clusters.
FileSystemObject
  Pointer to pointer that to store a pointer to the corresponding file system object.

#### Return Values

FR_OK (0)
  The function succeeded. The `*Clusters` has number of free clusters and `*FileSystemObject` points the file system object.
FR_INVALID_DRIVE
  The drive number is invalid.
FR_NOT_READY
  The disk drive cannot work due to no medium in the drive or any other reason.
FR_DISK_ERR
  The function failed due to an error in the disk function.
FR_INT_ERR
  The function failed due to a wrong FAT structure or an internal error.
FR_NOT_ENABLED
  The logical drive has no work area.
FR_NO_FILESYSTEM
  There is no valid FAT partition on the disk.

#### Descriptions

The f_getfree function gets number of free clusters on the drive. The member `csize` in the file system object is refrecting number of sectors per cluster, so that the free space in unit of sector can be calcurated with this. When FSInfo structure on FAT32 volume is not in sync, this function can return an incorrect free cluster count.

#### QuickInfo

Available when `_FS_READONLY == 0` and `_FS_MINIMIZE == 0`.

#### Example

        FATFS *fs;
        DWORD fre_clust, fre_sect, tot_sect;

        // Get drive information and free clusters
        res = f_getfree("/", &fre_clust, &fs);
        if (res) die(res);

        // Get total sectors and free sectors
        tot_sect = (fs->max_clust - 2) * fs->csize;
        fre_sect = fre_clust * fs->csize;

        // Print free space in unit of KB (assuming 512B/sector)
        printf("%lu KB total drive space.\n"
               "%lu KB available.\n",
               fre_sect / 2, tot_sect / 2);

#### See Also

`FATFS`

Return