EN JA
VOP_GETEXTATTR(9)
VOP_GETEXTATTR(9) FreeBSD Kernel Developer's Manual VOP_GETEXTATTR(9)

名称

VOP_GETEXTATTRvnode からの名前付き拡張属性を検索する

書式

#include < sys/param.h>
#include < sys/vnode.h>
#include < 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
属性名を含んでいる、ヌル文字で終了する文字列へのポインタ。
uio
読み込まれるデータの位置。
size
NULL でないなら、返り時に、属性データをすべて読み込むために必要なバイトの数を含みます。ほとんどの場合、 uio は、 size が、NULL でないとき、 NULL となり、その逆も同様です。
cred
要求の認証で使用するユーザ資格証明。
td
拡張属性を要求しているスレッド。

cred ポインタは、できれば、アクセス制御チェックが実行されないことを示す NULL を指定できます。この cred の設定は、アクティブなプロセスが行うことを許されないかもしれない拡張属性の検索をカーネルが認証することができるように使用されるかもしれません。

拡張属性のセマンティクスは、呼び出しを実装するファイルシステムによって異なります。拡張属性についての多くの情報は、 extattr(9) で見つけられます。

ロック

vnode は、入口でロックされ、返り時にロックされ続けるべきです。

戻り値

成功すれば、0 が返され、uio 構造体は、読み込まれたデータを反映するために更新されます。そうでなければ、適切なエラーコードが返されます。

エラー

[ ENOATTR]
要求された属性がこの vnode に対して定義されませんでした。
[ EACCES]
呼び出し側が適切な特権を持っていません。
[ ENXIO]
要求が、指定された vnode と属性名に対して、このファイルシステムで有効ではありませんでした。
[ ENOMEM]
十分なメモリが要求を実行するために利用可能ではありません。
[ EFAULT]
uio 構造体が無効のユーザ空間のアドレスを参照しています。
[ EINVAL]
name, namespace, または uio 引数が無効です。
[ EOPNOTSUPP]
ファイルシステムが VOP_GETEXTATTR() をサポートしていません。

バグ

属性名として空の文字列を渡すことによって、いくつかのファイルシステムは、要求された名前空間のためのターゲットの vnode で定義された名前のリストを返します。これは、悪い API で、明示的な VOP によって置き換えられるでしょう。
December 23, 1999 FreeBSD