diff --git a/doc/00index_e.html b/doc/00index_e.html index 1bdedbf..dc89108 100644 --- a/doc/00index_e.html +++ b/doc/00index_e.html @@ -42,36 +42,37 @@

Application Interface

FatFs module provides following functions to the applications. In other words, this list describes what FatFs can do to access the FAT volumes.

-

_USE_FASTSEEKが1で、且つファイル・オブジェクトのcltblメンバがNULL以外(f_open()でNULLに設定される)のとき、高速シーク・モードになります。これはファイルのクラスタ配置情報(CLMT)をメモリ上に保持しておくことにより、FATにアクセスすることなく後方シークやロング・シークを高速に行う機能です。高速シーク・モードは、f_read()/f_wtite()の動作にも適用されます。高速シーク・モードではf_wtite()/f_lseek()によるファイル・サイズの拡張はできません。

+

_USE_FASTSEEKが1で、且つファイル・オブジェクトのcltblメンバがNULL以外(f_open()でNULLに設定される)のとき、高速シーク・モードになります。これはファイルのクラスタ配置情報(CLMT)をメモリ上に保持しておくことにより、FATにアクセスすることなく後方シークやロング・シークを高速に行う機能です。高速シーク・モードは、f_read()/f_wtite()の動作にも適用されます。高速シーク・モードではf_wtite()/f_lseek()によるファイル・サイズの拡張はできません。

高速シーク動作を行う前に、CLMTを作成しておく必要があります。これを作成するには、まずCLMT格納バッファ(DWORD型配列)を準備し、cltblメンバにそのポインタをセットします。そして、配列の先頭要素にその配列のサイズ(要素数)を入れ、f_lseek()ofsCREATE_LINKMAPを指定して呼び出します。関数が成功するとCLMTが作成され、以降のf_read()/f_write()/f_lseek()ではFATへのアクセスは発生しません。FR_NOT_ENOUGH_COREで失敗したときは配列サイズが不足で、先頭要素には実際に必要となる要素数が返されます。必要な要素数は、(ファイルの分割数 + 1) * 2 です。たとえば、ファイルが5つのフラグメントに分断されているときに必要な要素数は、12となります。

@@ -69,7 +69,7 @@ FRESULT f_lseek (

使用例

     /* ファイルを開く */
-    fp = malloc(sizeof(FIL));
+    fp = malloc(sizeof (FIL));
     res = f_open(fp, "file.dat", FA_READ|FA_WRITE);
     if (res) ...
 
@@ -82,11 +82,11 @@ FRESULT f_lseek (
     /* 3000バイト進める */
     res = f_lseek(fp, f_tell(fp) + 3000);
 
-    /* 2000バイト戻す (オーバーフローに注意) */
+    /* 2000バイト戻す (ラップアラウンドに注意) */
     res = f_lseek(fp, f_tell(fp) - 2000);
 
-    /* クラスタ先行割り当て (ストリーミング・ライト時のバッファ・オーバーラン防止) */
+/* クラスタ先行割り当て (ストリーミング・ライト時のバッファ・オーバーラン防止) */
 
     res = f_open(fp, "record.wav", FA_CREATE_NEW | FA_WRITE);    /* ファイル作成 */
 
@@ -103,18 +103,18 @@ FRESULT f_lseek (
     res = f_close(fp);
 
-    /* 高速シーク機能を使う */
+/* 高速シーク機能を使う */
 
-    DWORD lktbl[SZ_TBL];                   /* リンク・マップ・テーブル格納バッファ */
+    DWORD clmt[SZ_TBL];                    /* リンク・マップ・テーブル格納バッファ */
 
     res = f_lseek(fp, ofs1);               /* 通常シーク (オープン時、cltblはNULLに初期化される) */
 
-    fp->cltbl = lktbl;                     /* 高速シーク機能の有効化 (cltbl != NULL) */
-    lktbl[0] = SZ_TBL;                     /* 先頭要素に配列要素数をセット */
+    fp->cltbl = clmt;                      /* 高速シーク機能の有効化 */
+    clmt[0] = SZ_TBL;                      /* 先頭要素に配列要素数をセット */
     res = f_lseek(fp, CREATE_LINKMAP);     /* CLMTの作成 */
     ...
 
-    res = f_lseek(fp, ofs2);               /* 以降、f_read/f_write/f_lseekでFATアクセスが発生しない */
+    res = f_lseek(fp, ofs2);               /* 以降、f_read/f_write/f_lseekでFATアクセスは発生しない */
 
diff --git a/doc/ja/mkfs.html b/doc/ja/mkfs.html index 130cd9f..a9b5ceb 100644 --- a/doc/ja/mkfs.html +++ b/doc/ja/mkfs.html @@ -16,9 +16,9 @@

論理ドライブ上にFATボリュームを作成(フォーマット)します。

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

引数

-
vol
-
フォーマットする論理ドライブ。(0 〜 _VOLUMES - 1)
+
path
+
フォーマット対象の論理ドライブを示すパス名を示すヌル文字'\0'終端の文字列へのポインタを指定します。ドライブ番号を含まない場合は、カレント・ドライブを意味します。
sfd
-
パーテーション形式。(0(FDISK) or 1(SFD))
+
パーテーション形式。(0(FDISK) または 1(SFD))
au
クラスタ・サイズをバイト単位で指定します。対象ドライブのセクタ・サイズのn倍(n = 1〜128で、2の累乗)でなければなりません。0を指定した場合、ボリュームのサイズに応じたデフォルトのクラスタ・サイズが選択されます。
@@ -51,7 +51,7 @@ FRESULT f_mkfs (

説明

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

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

-

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

+

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

FATタイプ(FAT12/FAT16/FAT32)は、その論理ドライブ上のクラスタ数によってのみ決定される決まり[FAT仕様書より]になっていて、それ以外の要因はありません。したがって、どのFATタイプになるかはドライブ・サイズとクラスタ・サイズに依存します。クラスタ・サイズは大きくするほど性能が上がり、ディスク利用効率は落ちます。

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

diff --git a/doc/ja/mount.html b/doc/ja/mount.html index e057d5b..7ad05d9 100644 --- a/doc/ja/mount.html +++ b/doc/ja/mount.html @@ -16,8 +16,9 @@

論理ドライブにファイル・システム・オブジェクトを登録・抹消します。

 FRESULT f_mount (
-  BYTE  vol,      /* [IN] 論理ドライブ番号 */
-  FATFS*  fatfs   /* [IN] ワーク・エリアへのポインタ */
+  FATFS*       fatfs,  /* [IN] ファイル・システム・オブジェクト */
+  const TCHAR* path,   /* [IN] 論理ドライブ番号 */
+  BYTE         opt     /* [IN] オプション */
 );
 
@@ -25,10 +26,12 @@ FRESULT f_mount (

引数

-
vol
-
論理ドライブ番号(0 〜 _VOLUMES - 1)。
fatfs
登録するファイル・システム・オブジェクトへのポインタ。
+
path
+
対象となる論理ドライブのパス名を示すヌル文字'\0'終端の文字列へのポインタを指定します。ドライブ番号を含まない場合は、デフォルト・ドライブを指定したことになります。
+
opt
+
ファイル・システム・オブジェクトの登録と同時にマウント動作を行うかどうかを指定するフラグ。登録抹消のときは意味を持ちません。
@@ -36,20 +39,30 @@ FRESULT f_mount (

戻り値

FR_OK, -FR_INVALID_DRIVE +FR_INVALID_DRIVE, +FR_DISK_ERR, +FR_NOT_READY, +FR_NO_FILESYSTEM

解説

-

FatFsモジュールでは、それぞれの論理ドライブにファイル・システム・オブジェクトというワーク・エリアが必要です。この関数は論理ドライブにそのワーク・エリアを登録したり抹消したりします。何らかのファイル関数を使用する前に、この関数でその論理ドライブのワーク・エリアを与えておかなければなりません。fatfsにヌル・ポインタを指定するとワーク・エリアの登録は抹消され、登録されていたワーク・エリアは破棄できます。操作対象のドライブに対して開かれているファイルやディレクトリがあった場合、それらは全て無効になります。

-

この関数は、物理ドライブの状態に関わらず常に成功します。関数内では下位レイヤへのアクセスは発生せず、指定されたワーク・エリアをクリア(無効化)し、そのアドレスを内部配列に登録するだけです。単に登録済みのワーク・エリアをクリアする目的にも使えます。ボリュームへのアクセス開始のとき次のうちいずれかまたは両方の条件が真のとき、実際のマウント動作(物理ドライブの初期化、FATボリュームの検索、BPBに従いワーク・エリアを初期化)が行われます。

+

FatFsモジュールでは、それぞれの論理ドライブにファイル・システム・オブジェクトというワーク・エリアが必要です。この関数は論理ドライブにファイル・システム・オブジェクトを登録したり抹消したりします。何らかのファイル関数を使用する前に、この関数でその論理ドライブのファイル・システム・オブジェクトを与えておかなければなりません。fatfsにヌル・ポインタを指定すると、その論理ドライブのファイル・システム・オブジェクトの登録は抹消されるだけです。登録抹消されたファイル・システム・オブジェクトのメモリは解放できます。操作対象の論理ドライブ上に開かれているファイルやディレクトリがあった場合、それらは全て無効になります。この関数の内部処理は次のような順に行われます。

+
    +
  1. 対象の論理ドライブをpathから得る。
  2. +
  3. 既に登録されているファイル・システム・オブジェクトはクリアし、登録を解除する。
  4. +
  5. fatfsが有効なポインタのときは、そのファイル・システム・オブジェクトをクリアし登録する。
  6. +
  7. マウント動作が指定されているときは、それを実行する。
  8. +
+

optに0を指定すると、マウント動作(物理ドライブの初期化、FATボリュームの検索、BPBを解析しファイル・システム・オブジェクトを初期化)は行われず、関数は物理ドライブの状態に関わらず常に成功します。関数内では下位レイヤへのアクセスは発生せず、指定されたファイル・システム・オブジェクトをクリア(無効化)し、そのアドレスを内部配列に登録するだけです。単に登録済みのファイル・システム・オブジェクトをクリアする目的にも使えます。そして、続いてボリュームへのアクセスが行われたとき次のうちいずれかでも真の場合は、実際のマウント動作が行われます。

-

下位レイヤがメディア交換の検出をサポートしないときは、アプリケーションはメディア交換のたびにf_mount()を実行する必要があります。

+

optに1を指定すると、登録に続いてマウント動作が行われます。マウントに失敗すると対応するエラーを返しますが、登録は有効なので続くボリュームへのアクセスで再びマウント動作が実行されます。

+

下位レイヤの実装上メディア交換の検出がサポートされない(disk_status()に反映されない)ときは、アプリケーションはメディア交換の後この関数でファイル・システム・オブジェクトを明示的にクリアして再マウントが正常に行えるようにする必要があります。

@@ -61,7 +74,7 @@ FRESULT f_mount (

参照

-

FATFS

+

f_open, FATFS

戻る

diff --git a/doc/ja/open.html b/doc/ja/open.html index d03eeb7..3cc7582 100644 --- a/doc/ja/open.html +++ b/doc/ja/open.html @@ -86,33 +86,64 @@ FRESULT f_open (
-

使用例(ファイル・コピー)

+

使用例

-void main (void)
+/* テキストファイルを読み出して表示 */
+
+FATFS FatFs;   /* 論理ドライブのワーク・エリア(ファイル・システム・オブジェクト) */
+
+int main (void)
 {
-    FATFS fs[2];         /* 論理ドライブのワーク・エリア(ファイル・システム・オブジェクト) */
+    FIL fil;       /* ファイル・オブジェクト */
+    char line[82]; /* 行バッファ */
+    FRESULT fr;    /* 戻り値 */
+
+
+    /* デフォルト・ドライブにワークエリアを与える */
+    f_mount(&FatFs, "", 0);
+
+    /* テキスト・ファイルを開く */
+    fr = f_open(&fil, "message.txt", FA_READ);
+    if (fr) return (int)fr;
+
+    /* 1行ずつ読み出して表示 */
+    while (f_gets(line, sizeof line, &fil))
+        printf(line);
+
+    /* ファイルを閉じる */
+    f_close(&fil);
+
+    return 0;
+}
+
+
+/* ドライブ1のファイル "file.bin" をドライブ0へコピー */
+
+int main (void)
+{
+    FATFS fs[2];         /* 論理ドライブのワークエリア(ファイル・システム・オブジェクト) */
     FIL fsrc, fdst;      /* ファイル・オブジェクト */
-    BYTE buffer[4096];   /* file copy buffer */
-    FRESULT res;         /* FatFs function common result code */
+    BYTE buffer[4096];   /* File copy buffer */
+    FRESULT fr;          /* FatFs function common result code */
     UINT br, bw;         /* File R/W count */
 
-    /* ドライブ0,1にワーク・エリアを与える (常に成功する) */
-    f_mount(0, &fs[0]);
-    f_mount(1, &fs[1]);
+    /* ドライブ0,1にワーク・エリアを与える */
+    f_mount(&fs[0], "0:", 0);
+    f_mount(&fs[1], "1:", 0);
 
-    /* ドライブ1のソース・ファイルを開く */
-    res = f_open(&fsrc, "1:srcfile.dat", FA_OPEN_EXISTING | FA_READ);
-    if (res) die(res);
+    /* ドライブ1のコピー元ファイルを開く */
+    res = f_open(&fsrc, "1:file.dat", FA_OPEN_EXISTING | FA_READ);
+    if (fr) return (int)fr;
 
-    /* ドライブ0にデスティネーション・ファイルを作成する */
-    res = f_open(&fdst, "0:dstfile.dat", FA_CREATE_ALWAYS | FA_WRITE);
-    if (res) die(res);
+    /* ドライブ0にコピー先ファイルを作成する */
+    res = f_open(&fdst, "0:file.dat", FA_CREATE_ALWAYS | FA_WRITE);
+    if (fr) return (int)fr;
 
-    /* ソースからデスティネーションにコピーする */
+    /* コピー元からコピー先にデータ転送する */
     for (;;) {
-        res = f_read(&fsrc, buffer, sizeof buffer, &br);
+        res = f_read(&fsrc, buffer, sizeof buffer, &br); /* コピー元からから読み出す */
         if (res || br == 0) break;   /* エラーかファイル終端 */
-        res = f_write(&fdst, buffer, br, &bw);
+        res = f_write(&fdst, buffer, br, &bw);           /* それをコピー先に書き込む */
         if (res || bw < br) break;   /* エラーかディスク満杯 */
     }
 
@@ -121,8 +152,10 @@ void main (void)
     f_close(&fdst);
 
     /* ワーク・エリアを開放する */
-    f_mount(0, NULL);
-    f_mount(1, NULL);
+    f_mount(NULL, "0:", 0);
+    f_mount(NULL, "1:", 0);
+
+    return (int)fr;
 }
 
diff --git a/doc/ja/opendir.html b/doc/ja/opendir.html index cdddec2..03c9331 100644 --- a/doc/ja/opendir.html +++ b/doc/ja/opendir.html @@ -16,7 +16,7 @@

ディレクトリを開きます。

 FRESULT f_opendir (
-  DIR* dj,           /* [OUT] ディレクトリ・ブジェクト構造体へのポインタ */
+  DIR* dp,           /* [OUT] ディレクトリ・ブジェクト構造体へのポインタ */
   const TCHAR* path  /* [IN] ディレクトリ名へのポインタ */
 );
 
@@ -25,8 +25,8 @@ FRESULT f_opendir (

引数

-
dj
-
初期化するディレクトリ・オブジェクト構造体へのポインタを指定します。
+
dp
+
空のディレクトリ・オブジェクト構造体へのポインタを指定します。
path
オープンするディレクトリのパス名を示すヌル文字'\0'終端の文字列へのポインタを指定します。
@@ -42,6 +42,7 @@ FRESULT f_opendir ( FR_NOT_READY, FR_NO_PATH, FR_INVALID_NAME, +FR_INVALID_OBJECT, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, @@ -53,7 +54,7 @@ FRESULT f_opendir (

解説

-

ディレクトリを開きます。正常終了したら、作成されたDIR構造体を使ってこのディレクトリの項目を順次読み出せます。作成されたディレクトリ・オブジェクトは、不要になったら任意の時点で破棄できます。

+

ディレクトリを開きます。正常終了したら、作成されたDIR構造体を使ってこのディレクトリの項目を順次読み出せます。

@@ -65,7 +66,7 @@ FRESULT f_opendir (

参照

-

f_readdir, DIR

+

f_readdir, f_closedir, DIR

戻る

diff --git a/doc/ja/printf.html b/doc/ja/printf.html index 51c28a3..4fc37f7 100644 --- a/doc/ja/printf.html +++ b/doc/ja/printf.html @@ -45,7 +45,7 @@ int f_printf (

解説

-

この関数は、f_putc()およびf_puts()のラッパー関数です。書式制御機能はサブセットとなっていて、書式制御文字は次に示すものが使用可能です。

+

この関数は、f_putc()およびf_puts()のラッパー関数です。書式制御機能はC標準ライブラリのサブセットとなっていて、書式制御文字は次に示すものが使用可能です。