名前


listxattr, llistxattr, flistxattr - 拡張属性の名前リストを得る

書式


#include <sys/types.h> #include <attr/xattr.h>

ssize_t listxattr(const char *path, char *list ", size_t " size ); ssize_t llistxattr(const char *path, char *list ", size_t " size ); ssize_t flistxattr(int filedes, char *list, size_t size);

説明


拡張属性は、inode (ファイル、ディレクトリ、シンボリックリンク等) に 関連付けられた name: value の対である。 これらは、システム上のすべての inode に関連付けられた通常の属性 (stat(2) が返すデータ) を拡張するものである。 拡張属性のコンセプトは attr(5) に書かれている。

listxattr() は、ファイルシステム内の指定された path に対応する拡張属性の名前リストを取得する。 リストは名前の集合で、 NULL 終端された文字列が連続して並んでいる。 呼び出したプロセスがアクセスする権限のない拡張属性の名前は、 リストに含まれない。拡張属性の名前の list の長さが返される。

llistxattr() は listxattr() と同じだが、シンボリックリンクの場合に、リンクが参照しているファイル ではなく、リンクそのものの拡張属性の名前リストを取得する点だけが異なる。

flistxattr() は listxattr() と同じだが、 path の代わりに filedes で指示されたオープン済みファイルの情報だけを取得する点が異なる (filedesopen(2) によって返される)。

個々の拡張属性の name は普通の NULL 終端された文字列である。 名前には、名前空間を表す接頭辞 (prefix) が含まれる; 個々の inode に対して、互いに独立な名前空間が複数あってもよい。

size に 0 を指定して空のバッファをこれらのシステムコールに渡すことができ、 この場合には拡張属性の名前リストの現在のサイズが返される。 この方法は名前リストを保持するのに十分な大きさのバッファ・サイズを 見積もるのに使うことができる、

返される名前の list は、 NULL 終端された文字列の配列 (属性名は NULL バイト (’\0’) で区切られている) で、各要素は整列されている訳ではない。 以下に例を示す:

user.name1\0system.name1\0user.name2\0

拡張属性を使って POSIX ACL を実装している ext2、ext3、XFS のようなファイル システムでは、返される list は以下のようになることだろう:

system.posix_acl_access\0system.posix_acl_default\0

返り値


成功した場合、拡張属性の名前リストの長さを表す正の数が返される。 失敗した場合、 -1 が返され、 errno に適切な値がセットされる。

list バッファの大きさ size が結果を保持するのに十分な大きさでない場合、 errno に ERANGE がセットされる。

拡張属性がそのファイルシステムでサポートされていない場合、 もしくは無効になっている場合、 errno に ENOTSUP がセットされる。

stat(2) システムコールの説明に書かれているエラーは これらのシステムコールにも適用される。

準拠


これらのシステムコールは Linux 独自である。

関連項目


getfattr(1), setfattr(1), getxattr(2), open(2), removexattr(2), setxattr(2), stat(2), attr(5)

openSUSE Logo

コンテンツ