2008年01月13日

UDF1.02 4-6 File Entry

一つのファイルあるいはディレクトリは、一つのファイルエントリを持っています。 ファイルエントリにはそのファイルの更新日時やファイル本体の位置 (ファイルが分割されていれば、 全ての分割ファイルの位置) が記述されます。 このため、ファイルが上書き保存されても、ディレクトリ本体=ディレクトリ内の全ファイルの情報 を変更することなく、そのファイルエントリを上書きするだけで済みます。

File Entry format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=261
16〜3520struct icbtagICB TagICB
36〜394unsigned longUid=-1 ファイル所有者ID
40〜434unsigned longGid=-1 ファイル所有グループID
44〜474unsigned longPermissions許可条件
48〜492unsigned shortFile Link Count自分+サブディレクトリ数
501unsigned charRecord Format=0 記録形式
511unsigned charRecord Display Attributes=0 記録表示属性
52〜554unsigned longRecord Length=0 記録長
56〜638unsigned int64Information Lengthファイルサイズ [bytes]
64〜718unsigned int64Logical Blocks Recorded使用している論理ブロックの数
72〜8312struct timestampAccess Date and Time最新アクセス日
84〜9512struct timestampModification Date and Time更新日時
96〜10712struct timestampAttribute Date and Time属性修正日時
108〜1114unsigned longCheckpoint=1 チェックポイント
112〜12716struct long_adExtended Attribute ICB拡張属性ICBの位置
128〜15932struct regidImplementation Identifier*開発者名
160〜1678unsigned int64Unique Id一意ID
168〜1714unsigned longLength of Extended Attributes (=L_EA)Extended Attributes の長さ [bytes]
172〜1754unsigned longLength of Allocation Descriptors (=L_AD)Allocation descriptors の長さ [bytes]
176〜176+L_EA-1L_EAunsigned char[L_EA]Extended Attributes拡張属性
176+L_EA〜176+L_EA+L_AD-1L_ADunsigned char[L_AD]Allocation descriptors(分割)ファイル本体の場所
もしくはファイル本体

Uid と Gid は、 UDF1.02 では特別な理由が無ければ無効を示す 232-1 (=0xFFFFFFFF, -1) を記入します。

Permissions は、ユーザーが実行できるファイルの動作を示します。
これは、実際の使用者 (ユーザーIDで区別される) で異なります。
ユーザーID と Uid が同じファイル所有者 Owner (ビット10〜14)
ユーザーID と Gid が同じグループ所属者 Group (ビット5〜9)
どちらでもない一般ユーザー Other (ビット0〜4)
の 3 種です。
それぞれに、Execute (実行)、Write(書き込み)、Read(読み取り)、Change Attribute(属性変更)、Delete(削除)、 の 5 種の動作が各ビットに割り振られ、そのビットが 1 ならその動作実行可能、0 なら実行不可です。

Allowed access
bit使用者意味
0OtherExecute
1OtherWrite
2OtherRead
3OtherChange Attribute
4OtherDelete
5GroupExecute
6GroupWrite
7GroupRead
8GroupChange Attribute
9GroupDelete
10OwnerExecute
11OwnerWrite
12OwnerRead
13OwnerChange Attribute
14OwnerDelete
15〜31予約予約

DVD-ROM なら、ファイルは各 Read が 1 (0x00001084)、ディレクトリは 各 Execute と各 Read が 1 (0x000014A5) です。

File Link Count は、ファイルは 1 、ディレクトリは自身+子ディレクトリ数 です。

UDF1.02 では、Record Format、Record Display Attributes、Record Length は 0 (指定せず) です。 (Record Length は Record Format に依存します。)

Information Length はファイルサイズです。ファイルが分割されていればその総和、 ディレクトリでもその長さです。単位はバイトです。
(本当は、確保しただけで使用していない領域を含みます。)

Logical Blocks Recorded は、ファイルが使っている論理ブロックの数です。 ファイルが一続きならば、
(ファイルサイズ[bytes] + 1論理ブロックサイズ[bytes] -1) / 1論理ブロックサイズ[bytes]
となります。

Checkpoint は最初 1 で、ユーザの指示があれば 1 づつ増やします。

拡張属性ICBを使用しない場合、Extended Attribute ICB を 0 に設定します。

UniqueID は、全てのファイルとディレクトリに割り振られた番号です。 ルートディレクトリは 0、1〜15 は Macintosh 用に予約で、 他のファイルとディレクトリは、16 以上のそれぞれ別の番号をもちます。 普通は、記録順に番号を振ってゆきます。 次に記録するときは、LVID に記録された値を記入し、LVID に保存された値を増やします。

Extended Attributes は、次回以降にお話します。

Allocation descriptors は ICB Tag の Flags の 0〜2 ビットで意味が変わります。
0〜2 では、ファイル/ディレクトリの位置と大きさを記した配置記述子の配列になっています。 0 では short_ad、1 では long_ad、2 では ext_ad、を使用します。 DVD-ROM では short_ad を使用します。
配置記述子は、ファイルが分割されていなければ 1 つだけ、分割されていれば 2 つ以上続きます。 数は L_AD から計算します。 それぞれの配置記述子に、(分割された) ファイルの位置と大きさが入っています。 ファイルの分割の順序は並び順と同じです。
配置記述子の Extent Length の下 29 ビットは、実際の (分割された) ファイルのバイト数 です (論理ブロックの整数倍ではありません)。上 2 ビットは 0 です。

ICB Tag の Flags の 0〜2 ビットが 3 のとき、Allocation descriptors にはファイル/ディレクトリの本体が、 直接記述されています。その長さは L_AD バイトです。この場合、ファイルは分割できません。

UDF1.02 では、一つの分割されたファイルの大きさは最大 230 - 論理ブロックサイズ バイトです。 ISO9660 と共存させるときのように、実際にはファイルがつながっている場合でも、 見かけは分割しているように記述します。

UDF1.02 では、ファイルエントリの大きさを 1 論理ブロックに収まるようにします。

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

メールアドレス:

ホームページアドレス:

コメント:

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


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

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

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