JFS2 ディレクトリーの処理
ディレクトリーは、ファイルシステム、リンク・ファイル、および i ノード・サブディレクトリー名に階層構造を提供します。 ネストするディレクトリーの深さに制限はありません。
ディレクトリー用のディスク・スペースは、 ファイルシステムのブロック単位で割り当てられます。
プロセスはディレクトリーを通常のファイルとして読み取ることができます。 ただし、ディレクトリーを作成できるのはカーネルです。 このため、ディレクトリーは、 ディレクトリーに固有のサブルーチンのセットによって作成および管理されます。
JFS2 ディレクトリー構造
- i ノード番号
- 名前 (最高 22 バイト)
- 名前の長さフィールド
- 名前が 23 バイト以上の場合にエントリーを続けるためのフィールド
ディレクトリー・エントリーは、名前によってソートされる B+ ツリーに保管されます。 自分自身 (.) の情報と親 (..) 情報は、ディレクトリー・エントリーではなく、i ノードに保管されます。
JFS2 ディレクトリーの処理 (プログラミング)
- closedir
- ディレクトリー・ストリームをクローズし、DirectoryPointer パラメーターに関連した構造を解放します。
- mkdir
- ディレクトリーを作成します。
- opendir
- 構造体ポインター (次のディレクトリー・エントリーを獲得するために readdir サブルーチンが使用し、読み取り位置を先頭にリセットするために rewinddir が使用し、 ディレクトリーをクローズするために closedir が使用するもの) を戻します。
- readdir
- 次のディレクトリー・エントリーを指すポインターを戻します。
- rewinddir
- 指定されたディレクトリー・ストリームの位置をディレクトリーの先頭にリセットします。
- rmdir
- ディレクトリーを除去します。
- seekdir
- telldir サブルーチンを使用して以前に入手した位置に戻ります。
- telldir
- 指定されたディレクトリー・ストリームに関連した現在の位置を戻します。
ディレクトリーへのアクセスに、open、read、lseek、および close サブルーチンを使用しないでください。
プロセスの現行ディレクトリーの変更
システムをブートすると、最初のプロセスは、現在のディレクトリーとして、 ルート・ファイルシステムのルート・ディレクトリーを使用します。 fork サブルーチンで作成された新規プロセスは、親プロセスで使用される現行ディレクトリーを継承します。 chdir サブルーチンはプロセスの現行ディレクトリーを変更します。
chdir サブルーチンは、 パス名を構文解析して、ターゲット・ファイルがディレクトリーであること、 およびプロセスのオーナーが当該ディレクトリーに対する許可を持っていることを確認します。 chdir サブルーチンの実行後、プロセスは新しい現在のディレクトリーを使用して、 / (スラッシュ) で始まらないすべてのパス名を検索します。
プロセスのルート・ディレクトリーの変更
プロセスは、chroot サブルーチンを介して、ルート・ディレクトリーの解釈の仕方を変更することができます。 コール側のプロセスの子プロセスは、chroot サブルーチンが示すディレクトリーをファイルシステムの論理ルート・ディレクトリーと見なします。
プロセスは、/ (スラッシュ) で始まるすべてのパス名に関して、グローバルなファイルシステムのルート・ディレクトリーを使用します。/ (スラッシュ) で始まるすべてのパス名の検索は、この新規ルート・ディレクトリーから開始されます。
JFS2 ディレクトリーを制御するサブルーチン
ディレクトリー・ファイルに固有な性質のために、 ディレクトリーはサブルーチンの特殊なセットによって制御します。 ディレクトリーを制御するために、 以下のサブルーチンが用意されています。