名前付き拡張属性は、ファイルまたはディレクトリを表現する vnode に
追加のメタデータを関連付けることを可能にします。
この追加のデータのセマンティクスは、"name=value" ("名前=値") のペアで、
名前は定義されても定義されなくても良く、定義されていれば、0 バイト以上の
任意のバイナリデータに関連付けられます。
拡張属性の名前は名前空間の集合の中に存在します。
拡張属性上の個々の操作は、操作を参照するために名前空間を供給することが
要求されています。
複数の名前空間の中に同じ名前が存在する場合には、その名前に関連付けられた
拡張属性は、独立して格納され、操作されます。
次の 2 つの名前空間が普遍的に定義されていますが、個々のファイルシステムは
追加の名前空間を実装することが可能で、またこれら
EXTATTR_NAMESPACE_USER,
EXTATTR_NAMESPACE_SYSTEM
の名前空間を実装しないことも可能です。
これらの属性のセマンティクスは以下を意図しています。
ユーザ属性データは、ファイルまたはディレクトリの中のデータに関連付けられた
通常の任意および必須の保護によって、保護されます。
システム属性データは、これらの属性への直接的なアクセスまたは操作には
適切な特権が要求されることによって、保護されます。
拡張属性データの読み込みは、
VOP_READ(9)
の形式で、明示されたメタデータの連続した領域を返します。
一方、書込みは、
与えられた名前に関連付けられた現在の "値" 全体が置き換えられます。
拡張属性の違いを持つファイルシステムが過多にあります。
このため、これらの関数は、利用可能性および機能性は制限されるかもしれませんし、
サポートするファイルシステムの基本的なセマンティクスを意識して
使用するべきです。
拡張属性データのための権限を与える機構は、
ファイルシステムによって異なります。
これは、属性の最大の大きさや、
任意または特定の新規属性を定義可能か否かも同様です。
拡張属性は、ヌルで終端された文字列を使用して名前付けされます。
名前は大文字と小文字を区別するかもしれませんし、しないかもしれませんが、
これは潜在的なファイルシステムのセマンティクスに依存します。
適切な vnode 拡張属性の呼び出しは、
VOP_GETEXTATTR(9),
VOP_LISTEXTATTR(9) [英語],
および
VOP_SETEXTATTR(9)
です。