JFS2 ディレクトリーの処理

ディレクトリーは、ファイルシステム、リンク・ファイル、および i ノード・サブディレクトリー名に階層構造を提供します。 ネストするディレクトリーの深さに制限はありません。

ディレクトリー用のディスク・スペースは、 ファイルシステムのブロック単位で割り当てられます。

プロセスはディレクトリーを通常のファイルとして読み取ることができます。 ただし、ディレクトリーを作成できるのはカーネルです。 このため、ディレクトリーは、 ディレクトリーに固有のサブルーチンのセットによって作成および管理されます。

JFS2 ディレクトリー構造

ディレクトリーには、そのディレクトリーに入っているオブジェクトを記述するエントリーが入っています。 ディレクトリー・エントリーは固定長であり、次のものが入っています。
  • i ノード番号
  • 名前 (最高 22 バイト)
  • 名前の長さフィールド
  • 名前が 23 バイト以上の場合にエントリーを続けるためのフィールド

ディレクトリー・エントリーは、名前によってソートされる B+ ツリーに保管されます。 自分自身 (.) の情報と親 (..) 情報は、ディレクトリー・エントリーではなく、i ノードに保管されます。

ディレクトリーには、次のアクセス・モードがあります。
モード 説明
read プロセスが、ディレクトリー・エントリーを読めるようにします。
write プロセスが、creatmknodlink、および unlink サブルーチンを使用して、 新規ディレクトリー・エントリーを作成したり、古いディレクトリー・エントリーを除去できるようにします。
execute プロセスが、ディレクトリーを現在の作業ディレクトリーとして使用するか、または ファイル・ツリー内の当該ディレクトリーの下を検索できるようにします。

JFS2 ディレクトリーの処理 (プログラミング)

ディレクトリーの処理に使用できるサブルーチンのリストは、次のとおりです。
closedir
ディレクトリー・ストリームをクローズし、DirectoryPointer パラメーターに関連した構造を解放します。
mkdir
ディレクトリーを作成します。
opendir
構造体ポインター (次のディレクトリー・エントリーを獲得するために readdir サブルーチンが使用し、読み取り位置を先頭にリセットするために rewinddir が使用し、 ディレクトリーをクローズするために closedir が使用するもの) を戻します。
readdir
次のディレクトリー・エントリーを指すポインターを戻します。
rewinddir
指定されたディレクトリー・ストリームの位置をディレクトリーの先頭にリセットします。
rmdir
ディレクトリーを除去します。
seekdir
telldir サブルーチンを使用して以前に入手した位置に戻ります。
telldir
指定されたディレクトリー・ストリームに関連した現在の位置を戻します。

ディレクトリーへのアクセスに、openreadlseek、および close サブルーチンを使用しないでください。

プロセスの現行ディレクトリーの変更

システムをブートすると、最初のプロセスは、現在のディレクトリーとして、 ルート・ファイルシステムのルート・ディレクトリーを使用します。 fork サブルーチンで作成された新規プロセスは、親プロセスで使用される現行ディレクトリーを継承します。 chdir サブルーチンはプロセスの現行ディレクトリーを変更します。

chdir サブルーチンは、 パス名を構文解析して、ターゲット・ファイルがディレクトリーであること、 およびプロセスのオーナーが当該ディレクトリーに対する許可を持っていることを確認します。 chdir サブルーチンの実行後、プロセスは新しい現在のディレクトリーを使用して、 / (スラッシュ) で始まらないすべてのパス名を検索します。

プロセスのルート・ディレクトリーの変更

プロセスは、chroot サブルーチンを介して、ルート・ディレクトリーの解釈の仕方を変更することができます。 コール側のプロセスの子プロセスは、chroot サブルーチンが示すディレクトリーをファイルシステムの論理ルート・ディレクトリーと見なします。

プロセスは、/ (スラッシュ) で始まるすべてのパス名に関して、グローバルなファイルシステムのルート・ディレクトリーを使用します。/ (スラッシュ) で始まるすべてのパス名の検索は、この新規ルート・ディレクトリーから開始されます。

JFS2 ディレクトリーを制御するサブルーチン

ディレクトリー・ファイルに固有な性質のために、 ディレクトリーはサブルーチンの特殊なセットによって制御します。 ディレクトリーを制御するために、 以下のサブルーチンが用意されています。

chdir
現在の作業ディレクトリーを変更します。
chroot
実効ルート・ディレクトリーを変更します。
opendirreaddirtelldirseekdirrewinddir、または closedir
ディレクトリーに様々なアクションを実行します。
getcwd または getwd
現在のディレクトリーへのパスを獲得します。
mkdir
ディレクトリーを作成します。
rename
ディレクトリーの名前を変更します。
rmdir
ディレクトリーを除去します。