#include <sys/types.h> #include <attr/xattr.h> ssize_t getxattr(const char *path, const char *name, void *value, size_t size); ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size); ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size);
getxattr() は、ファイルシステム内の指定された path に対応する、名前 name の拡張属性の value (値) を取得する。 属性 value の長さが返される。
lgetxattr() は getxattr() と同じだが、シンボリックリンクの場合に、リンクが参照しているファイル ではなく、リンクそのものの情報を取得する点だけが異なる。
fgetxattr() は getxattr() と同じだが、 path の代わりに filedes で指示されたオープン済みファイルの情報だけを取得する点が異なる (filedes は open(2) によって返される)。
拡張属性の名前 name は普通の NULL 終端された文字列である。 名前には、名前空間を表す接頭辞 (prefix) が含まれる; 個々の inode に対して、互いに独立な名前空間が複数あってもよい。 拡張属性の値は、ある一定の長さの任意のテキスト・データまたは バイナリ・データの集合である。
size に 0 を指定して空のバッファをこれらのシステムコールに渡すことができ、 この場合には指定された名前の拡張属性の現在のサイズが返される。 この方法は、拡張属性の値を保持するのに十分な大きさのバッファ・サイズを 見積もるのに使うことができる、
このシステムコール・インタフェースは、初期バッファのサイズの推測をしたり、 与えられたバッファが小さすぎたことを返り値で知らせることでバッファを大きく したりできるように設計されている。
指定された名前の属性が存在しない場合、またはプロセスがその属性にアクセス する権限がない場合、 errno に ENOATTR がセットされる。
value バッファの大きさ size が結果を保持するのに十分な大きさでない場合、 errno に ERANGE がセットされる。
拡張属性がそのファイルシステムでサポートされていない場合、 もしくは無効になっている場合、 errno に ENOTSUP がセットされる。
stat(2) システムコールの説明に書かれているエラーは これらのシステムコールにも適用される。