VOP_GETEXTATTR(9)

名称
VOP_GETEXTATTR - vnode からの名前付き拡張属性の取り出し

書式
<sys/param.h> <sys/vnode.h> <sys/extattr.h> int VOP_GETEXTATTR(struct vnode *vp, int attrnamespace, const char *name, struct uio *uio, size_t *size, struct ucred *cred, struct thread *td)

解説
この vnode 呼び出しは、ファイルまたはディレクトリから、 指定した名前付き拡張属性を取り出すために使用することができます。

引数は以下の通りです。

vp  ファイルまたはディレクトリの vnode。

attrnamespace
    どの拡張属性の名前空間に、その属性の名前が存在するのかを示す整数定数。

name
    属性名が入った null で終端された文字列へのポインタ。

uio 読み込むべきデータの位置。

size
    NULL でない場合には、戻る時に全ての属性データを読込むために要求される バイト数が含まれます。 殆んどの場合、 size が NULL ではない時には uio が NULL にされます。 またはその逆です。

cred
    要求の認証で使用するためのユーザ証明。

td  拡張属性を要求しているスレッド。

cred ポインタは、 NULL を渡すことができ、 可能であるならばアクセス制御チェックが実行されないことを指示します。 この cred の設定は、アクティブプロセスに許されていない拡張属性の取り出しを カーネルが正当化することを認めるために使用可能です。

拡張属性のセマンティクスはファイルシステムの呼び出しの実装によって 異なるでしょう。 拡張属性のより多くの情報は extattr(9) を参照してください。

LOCKS
この vnode は入る時にロックされ、戻る時までロックされ続けるべきです。

戻り値
成功時には 0 が返され、読み込んだデータを反映して uio 構造体が更新されます。 そうでなければ適切なエラーコードが返されます。

エラー

[ENOATTR]
    要求された属性は、この vnode のために定義されていません。

[EACCES]
    呼び出し側が適切な特権を持っていません。

[ENXIO]
    指定された vnode および属性名に対する要求は、このファイルシステムでは無効です。

[ENOMEM]
    その要求を実行するための十分なメモリが利用可能ではありません。

[EFAULT]
    uio 構造体が無効なユーザ空間アドレスを参照しています。

[EINVAL]
    name, namespace, または uio 引数が無効です。

[EOPNOTSUPP]
    ファイルシステムが VOP_GETEXTATTR() をサポートしていません。

関連項目
extattr(9), vnode(9), VOP_LISTEXTATTR(9), VOP_SETEXTATTR(9)

バグ
属性名として空の文字列を渡すことによって、いくつかのファイルシステムは、 要求された名前空間における対象 vnode の持つ定義された名前のリストを返します。 これは悪い API ですので、明示的な VOP で置き換えられる予定です。