私はこれの専門家ではありませんが、何が起こっているのかを理解するために少し読んでみました。
「混乱は次の事実から生じます。
- これらの概念間の関係は複雑であり、
- 時間とともに変化し、
- AppleはプログラムレベルのAPIとlsやcpなどのツールの両方を実装しているため、概念間の違いの多くを隠すことができます。」
AIUI、HFS +カタログファイルには、(特に)カタログファイルレコードが含まれています。カタログファイルレコードには、作成日、アクセス日など、ファイルに関する通常の種類の情報が含まれています。カタログファイルレコードには、データフォークとリソースフォークの場所とサイズに関する情報を提供する2つの構造も含まれています。
AIUI、HFS +には(Wikipedia HFS +からコピーした)「属性ファイル[これはHFS Plusの新しいBツリーであり、HFSに対応する構造がありません。属性ファイルは4 KBレコードの3つの異なるタイプを保存できます。インラインデータ属性レコード、フォークデータ属性レコード、および拡張属性レコード。インラインデータ属性レコードは、レコード自体に収まる小さな属性を格納します。フォークデータ属性レコードには、より大きな属性を保持できる最大8つのエクステントへの参照が含まれます。拡張属性は8つのエクステントレコードがすでに使用されている場合に、フォークデータ属性レコードを拡張するために使用されます。」
AIUI、属性ファイルに格納された(または属性ファイルから参照された)データ(インライン、フォークデータ、または拡張属性)は、拡張属性と呼ばれます。
これらはデータ構造なので、どのように使用されますか?
オペレーティングシステムの初期バージョン(おそらく10.4 Tigerより前のバージョンで、John Siracusaがこの領域に大きな変更があったことを示しているようです)は、カタログファイルのデータフォークとリソースフォークを指しています。
AIUI、10.4 Tigerに到達すると、属性ファイルはあらゆる種類のデータを格納するために広く使用されるようになります。
10.4以降では、すべてのリソースフォークが属性ファイルからポイントされる可能性があります(ただし、わかりません)。つまり、最初の質問に答えると、名前付きフォークはリソースフォークでなく、リソースフォークがカタログファイルから参照されない限り、拡張属性であると言えます。
実装方法を理解する上での問題は、下位互換性を維持するために、おそらく1つのバージョンのMac OSが別のバージョンから作成したファイルシステムへのアクセスをサポートするために、さまざまなものとその混合が透過的にサポートされる必要があることです。
通常のターミナルコマンドラインツールからは、データが実際に保持されている場所を特定できません。
したがって、へのアクセスrsrc
は、カタログファイルのリソースフォークへのアクセスを示唆している可能性があります。
$ ls -l Icon^M/rsrc
-rwxr-xr-x 1 root admin 486 23 Jul 2004 Icon?/rsrc
ただし、構文はIcon^M
ディレクトリの下のファイルにアクセスしているように見えますが、実際にはそうではありません。
$ ls -lR Icon^M
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
そのため、Appleはリソースフォークの特別なケースを実装しました。
代わりに
$ ls -l@
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
com.apple.FinderInfo 32
com.apple.ResourceFork 486
これは、属性ファイルにアクセスしていることを示しています。ただし、の実装にls
は、リソースフォークの特別なケースがあります。
John Siracusa は、ACLリストは「拡張属性」として保存されているが、特別にマスクされているため、には表示されないことをここで指摘していますxattr
。そのため、xattrの実装には特別なケース処理があります。
(この特殊なケースの処理は、ツールのコード内、またはツールがアクセスする基本的なAPIのコード内にある場合があることに注意してください。)
GregW、これを見たら、私が正しい方向に進んでいるのか、それとも絶望的に混乱しているのかについて、より専門的な意見を得るとよいでしょう。