## f_mkfs

論理ドライブ上にFATボリュームを作成します。

    FRESULT f_mkfs (
      const TCHAR* path, /* [IN] 論理ドライブ番号 */
      BYTE  sfd,         /* [IN] 区画作成方法 */
      UINT  au           /* [IN] クラス タサイズ */
    );

#### 引数

path
  対象の論理ドライブを示すパス名を示すヌル文字`'\0'`終端の文字列へのポインタを指定します。ドライブ番号を含まない場合は、カレント ドライブを意味します。
sfd
  パーテーション形式。(0(FDISK) または 1(SFD))
au
  クラスタ サイズをバイト数またはセクタ数で指定します。値が1～128の範囲場合は、セクタ数を示します。値が`_MIN_SS`以上の場合は、バイト数を示します。無効値(0または2の累乗でない値など)を指定した場合、ボリュームのサイズに応じたデフォルトのクラスタ サイズが自動選択されます。

#### 戻り値

FR_OK, FR_DISK_ERR, FR_NOT_READY, FR_NOT_ENABLED, FR_MKFS_ABORTED, FR_INVALID_PARAMETER

#### 説明

物理ドライブ上にFATボリュームを作成(フォーマット)します。FDISK形式が指定された場合は、物理ドライブ全体を占める基本区画(パーテーション)が作成され、その中にFATボリュームが作成されます。SFD形式では、FATボリュームが物理ドライブの先頭セクタからベタで作成されます。

マルチ パーテーション機能(`_MULTI_PARTITION`)が有効で、かつフォーマット対象の論理ドライブが特定の区画(1～4)に結び付けられている場合は、その区画の中にFATボリュームが作成されます。`sfd`は無視され、その物理ドライブはこれに先立ち、`f_fdisk`関数または他のツールで適切に区画設定されている必要があります。

パーテーション形式には、FDISK形式とSFD形式の二通りあります。FDISK形式は、ハードディスク、MMC、SDC、CFC、U Diskなどで標準的に使用されます。FDISK形式では一台の物理ドライブ上に一つまたは複数の区画を作成することができます。区画管理情報はMBR(物理ドライブの先頭セクタ)に記録されます。SFD形式は単に何の分割も行わない形式で、ボリュームは物理ドライブの先頭セクタから開始します。SFD形式は、フロッピー ディスク、マイクロドライブ、光学ディスク、およびその他スーパー フロッピー メディアで標準的に使用されています。

FATタイプ(FAT12/FAT16/FAT32)は、そのボリューム上のクラスタ数によってのみ決定される決まり[FAT仕様書より]になっていて、それ以外の要因はありません。したがって、どのFATタイプになるかはボリューム サイズとクラスタ サイズに依存します。クラスタ サイズは大きくするほど性能が上がります。

クラスタ数がFATタイプの境界に近くなるときは、`FR_MKFS_ABORTED`で関数が失敗する可能性があります。

#### 対応情報

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

#### 使用例

    /* Format default drive and create a file */
    int main (void)
    {
        FATFS fs;      /* File system object (volume work area) */
        FIL fil;       /* File object */
        FRESULT res;   /* API result code */
        UINT bw;       /* Bytes written */

        /* Register work area (do not care about error) */
        f_mount(&fs, "", 0);

        /* Create FAT volume with default cluster size */
        res = f_mkfs("", 0, 0);
        if (res) ...

        /* Create a file as new */
        res = f_open(&fil, "hello.txt", FA_CREATE_NEW | FA_WRITE);
        if (res) ...

        /* Write a message */
        f_write(&fil, "Hello, World!\r\n", 15, &bw);
        if (bw != 15) ...

        /* Close the file */
        f_close(&fil);

        /* Unregister work area */
        f_mount(0, "", 0);

#### 参照

`ボリューム管理, f_fdisk`

戻る