2007年06月15日

ISO9660 その13 パステーブル

パステーブルには、ボリュームが持つ全てのディレクトリの階層情報とディレクトリの場所が記されています。 つまりディレクトリを親から順に辿らなくともショートカットできるわけですが、 それにはパステーブルを全て読み込む必要があります。

パステーブルは、単純に言うと パステーブルレコードというディレクトリの情報を記した構造体をつなげて並べたものです。

一つのパステーブルレコードは一つのディレクトリに対応し、 順番に番号が割り振られます。 ルートディレクトリが 1 です。 子ディレクトリのパステーブルレコードは、親ディレクトリのパステーブルレコードの番号を持っています。

パステーブルレコードは以下の規則に従って並べられます。
1. ディレクトリ階層順。ルートから順に、親が前、子が後。
2. 同じ階層では、親ディレクトリの番号が若い方から先。
3. 親が同じならば、名前(文字コード)順。

パステーブルは、L型とM型をそれぞれ用意します。 L型では パステーブルレコードの Location of Extent と Parent Directory Number をリトルエンディアンで、 M型ではビッグエンディアンで記述します。

また、もう一つづつ予備のパステーブルを用意することも出来ます。

個々のパステーブルレコードの構造は、次のとおりです。

位置大きさ名称内容
01unsigned charLength of Directory Identifier (LEN_DI) ディレクトリ識別子の長さ
11unsigned charExtended Attribute Record Length 拡張属性レコードの長さ
2〜54unsigned long (L/M)Location of Extent ディレクトリの先頭位置 [LBN]
6〜72unsigned short (L/M)Parent Directory Number 親ディレクトリの番号
8〜(8+LEN_DI-1)LEN_FIchar[LEN_FI]File Identifier ディレクトリ識別子
8+LEN_DI1unsigned charPadding Field =0 全体を偶数にするため


Extended Attribute Record Length は、無ければ 0x00 です。

ディレクトリ識別子は、ディレクトリレコードと同様に、 ルートディレクトリでは1バイトの 0x00、 それ以外の一般的なディレクトリにはd/d1文字を使用します。

ディレクトリ識別子の長さが奇数の場合(全体の長さが奇数になってしまった場合) 終端に 1 バイト追加し、0x00 を入れます。これが Padding Field です。 ファイル名の長さが偶数ならば、必要ありません。

posted by 七癖 at 10:07| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。