━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ いざというときに役立つMS−DOS 執筆:速星 千里 第43号(2004.02.14) FATファイルシステム(3) 5839部配信 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <目次> ■ はじめに ■ ファイルアクセスの過程 ● 読み込み ● 新規作成 ■ ディレクトリの管理(2) ● サブディレクトリのディレクトリエントリ ■ おすすめメルマガ情報 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ はじめに ------------------------------------------------------------------------ 皆さん、こんにちは。速星です。 今週は、第38号と第40号の続きで、DOSがどのようにFATを利用してい るかを説明します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ ファイルアクセスの過程 ------------------------------------------------------------------------ 第38号で説明したように、ディスクは、多数のクラスタに分割して管理されて います。 FATファイルシステムの場合、ディスクの一番先頭のクラスタにはFATが保 存されています。FATは、ディスク中の各クラスタに保存されているデータが 何番のクラスタに続いているのかを示す一覧表です。 また、2番目のクラスタにはディレクトリエントリがあります。こちらは、ファ イル名とそのファイルの先頭クラスタ番号の対応などを記録した表です。 ここでは、1.2MBでフォーマットした2HDフロッピーディスクへのファイルの読み 書きを例に、DOSやWindowsなどのOSが、FATやディレクトリエントリを どのように利用しているかを説明します。 ------------------------------------------------------------------------ ● 読み込み 例えば、ルートディレクトリにある「FILENAME.TXT」というファイルを読み込む 場合を考えてみましょう。 DOSがファイルを読み込む際は、まず、ディレクトリエントリからファイル名 の一致する項目を検索します。 【註】 表は、等幅フォントでご覧下さい。 ☆ ディレクトリエントリの例 ┌──────┬───┬────┬────┬──────┬───┐ │ ファイル名 │ 属性 │更新時刻│ 更新日 │先頭クラスタ│サイズ│ ├──────┼───┼────┼────┼──────┼───┤ ├──────┼───┼────┼────┼──────┼───┤ │IO .SYS│---SHR│22:22:00│99/05/05│    3  │224150│ ├──────┼───┼────┼────┼──────┼───┤ │MSDOS .SYS│---SH-│03:18:14│04/01/28│  222  │ 1700│ ├──────┼───┼────┼────┼──────┼───┤ │COMMAND .COM│-----R│22:22:00│99/05/05│  224  │118174│ ├──────┼───┼────┼────┼──────┼───┤ │FILENAME.TXT│A----R│07:00:00│04/02/14│  340  │ 2500│ ├──────┼───┼────┼────┼──────┼───┤ │AUTOEXEC.BAT│A-----│00:16:48│04/02/09│  345  │ 524│ ├──────┼───┼────┼────┼──────┼───┤ │CONFIG .SYS│A-----│23:47:30│04/01/28│  346  │ 351│ ├──────┼───┼────┼────┼──────┼───┤ ファイル名の一致する項目が見つかれば、そこに記録されている、ファイルの先 頭クラスタ番号を読み出します。 この例では、「FILENAME.TXT」の先頭クラスタ番号は340と分かります。 クラスタ340からデータを読み込みます。 次に、FATを参照し、クラスタ340の続きのデータが保存されているクラス タの番号を確認します。 【註】 表は、等幅フォントでご覧下さい。 ☆ FATの例 ┌──────┬──────┐ │クラスタ番号│次のクラスタ│ ├──────┼──────┤ ├──────┼──────┤ │  339  │ 4095 │ ├──────┼──────┤ │  340  │  341 │ ├──────┼──────┤ │  341  │  344 │ ├──────┼──────┤ │  342  │    0 │ ├──────┼──────┤ │  343  │    0 │ ├──────┼──────┤ │  344  │ 4095 │ ├──────┼──────┤ │  345  │ 4095 │ ├──────┼──────┤ 上の例では、クラスタ340の続きのデータはクラスタ341に保存されている と分かりますので、クラスタ341のデータを読み込みます。 同様にして、クラスタ341の続きのデータを、クラスタ344から読み込みま す。 FATをみると、クラスタ344の次のクラスタ番号の欄は、4095(16進数 のFFF)となっています。これは、ファイルの終了を意味する特別な数字です。 従って、ファイルの読み込みはここまでで終了です。 結局のところ、340→341→344という3つのクラスタに保存されている データをつなぎ合わせたものが、「FILENAME.TXT」の中身として読み込まれたこ とになります。 ------------------------------------------------------------------------ ● 新規作成 今度は、ファイルを新規作成する場合の手順を、「NEWFILE.TXT」という1500バ イトのファイルを例に説明します。 今考えているディスクのクラスタサイズは1024バイトなので、1500バイトのファ イルは2つのクラスタにまたがって保存されることになります。 そこでまずFATを参照し、未使用クラスタ、すなわち、次のクラスタ番号の欄 が0になっているクラスタを2個探します。 上に掲げたFATの例では、342と343のクラスタが空いていますから、こ こに「NEWFILE.TXT」が保存されることになります。 クラスタ342の次のクラスタ番号は343、またクラスタ343の次のクラス タ番号は4095(ファイル終了)、というようにFATを書き換えます。 そして、ディレクトリエントリに以下のような項目を追加します。 【註】 表は、等幅フォントでご覧下さい。 ☆ ディレクトリエントリの追加項目の例 ┌──────┬───┬────┬────┬──────┬───┐ │ ファイル名 │ 属性 │更新時刻│ 更新日 │先頭クラスタ│サイズ│ ├──────┼───┼────┼────┼──────┼───┤ ├──────┼───┼────┼────┼──────┼───┤ │NEWFILE .TXT│A-----│07:00:00│04/02/14│  342  │ 1500│ ├──────┼───┼────┼────┼──────┼───┤ これで、「NEWFILE.TXT」を保存するために必要なディスク上の空間が確保され ました。 後は、ファイルの内容を342→343という2つのクラスタに分けて書き込め ば、ファイル作成は完了となります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ ディレクトリの管理(2) ------------------------------------------------------------------------ ● サブディレクトリのディレクトリエントリ ここまでの説明では、ルートディレクトリ以外のディレクトリは考えてきません でした。でも、階層ディレクトリの概念は以外と簡単です。 まず、ディスク中の適当なクラスタにサブディレクトリのディレクトリエントリ を作ります。そして、ルートディレクトリのディレクトリエントリの項目として、 サブディレクトリを登録します。 これで、ルートディレクトリからサブディレクトリを参照できるようになります。 下に、ルートディレクトリへの登録の例を示します。属性欄の「D」が、ディレ クトリであることを表しています。 【註】 表は、等幅フォントでご覧下さい。 ☆ ルートディレクトリ「\」のディレクトリエントリの項目例 ┌──────┬───┬────┬────┬──────┬───┐ │ ファイル名 │ 属性 │更新時刻│ 更新日 │先頭クラスタ│サイズ│ ├──────┼───┼────┼────┼──────┼───┤ ├──────┼───┼────┼────┼──────┼───┤ │SUBDIR │-D----│00:00:00│04/01/01│  347  │ 192│ ├──────┼───┼────┼────┼──────┼───┤ また、サブディレクトリのディレクトリエントリには、親ディレクトリ「..」 を登録しておきます。 これがないと、相対パスで親ディレクトリが参照できません。 【註】 表は、等幅フォントでご覧下さい。 ☆ サブディレクトリ「\SUBDIR」のディレクトリエントリの項目例 ┌──────┬───┬────┬────┬──────┬───┐ │ ファイル名 │ 属性 │更新時刻│ 更新日 │先頭クラスタ│サイズ│ ├──────┼───┼────┼────┼──────┼───┤ ├──────┼───┼────┼────┼──────┼───┤ │.. │-D----│22:22:00│99/05/05│    2  │ 256│ ├──────┼───┼────┼────┼──────┼───┤ サブディレクトリ中にさらにサブディレクトリを作る場合も、考え方は同じです。 親ディレクトリ側のディレクトリエントリに子ディレクトリの項目を、子ディレ クトリ側のディレクトリエントリに親ディレクトリ「..」の項目を作ることにな ります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ おすすめメルマガ情報 ------------------------------------------------------------------------ 私が創刊号から読み続けている、お勧めのメルマガです↓ ━━━ ☆★ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 女┃性┃の┃本┃音┃ ゾ┃ク┃ゾ┃ク┃さ┃せ┃て┃よ┃ ━┛━┛━┛━┛━┛ ━┛━┛━┛━┛━┛━┛━┛━┛ 女性ライターによる女性の生活、行動、恋愛、心理、思考、性等に本気の 本音で書かれたコラム集。仕事や勉強の合間に頭を休められる必須マガジン♪ ゾクゾクしたいなら読んでおかないと損するかも♪ http://melten.com/osusume/?m=11891&u=11891 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ☆★ ━━━━ ------------------------------------------------------------------------ 今回はここまでです。 お疲れ様でした! 次号の予定は、「リダイレクトとパイプ(2)」です。 第42号の続きで、パイプについて説明します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ コメントをお待ちしています ------------------------------------------------------------------------ 皆さんからの感想・質問・要望をお待ちしています。 「こんなテーマを扱ってほしい」 「こんなことはできるの?」 「このへんが分かりにくかった」 「1回の分量を増やしてほしい/減らしてほしい」 など、掲示板(下記URL)まで気軽にお願いします。 http://bbs9.otd.co.jp/dos/bbs_thread (スレッド表示) http://bbs9.otd.co.jp/dos/bbs_tree (ツリー表示) メールでもコメントを受け付けておりますので、そちらもご利用下さい。 tetrahedrane@yahoo.co.jp なお、いただいたコメントは、本マガジン上で引用する場合があります。 (メールアドレスやお名前は一切公開いたしません) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ● 感想・質問宛先 http://bbs9.otd.co.jp/dos/bbs_tree tetrahedrane@yahoo.co.jp ● 広告募集 当メルマガへの広告掲載をご希望の方は、下記アドレスまでお願いします。 tetrahedrane@yahoo.co.jp ● メルマガ交換広告募集 当メルマガとのメルマガ交換広告をご希望の方は、下記アドレスまでどうぞ。 tetrahedrane@yahoo.co.jp ● 登録・解除・バックナンバー http://www.geocities.co.jp/Bookend-Hemingway/4963/column/dos/ このメールマガジンは、『まぐまぐ』を利用して発行しています。 http://www.mag2.com/m/0000106066.htm (c) 2003 Chisato Hayahoshi