Other Alias
setxattr, fsetxattr書式
#include <sys/types.h>
#include <sys/xattr.h>
int setxattr(const char *path, const char *name,
const void *value, size_t size, int flags);
int lsetxattr(const char *path, const char *name,
const void *value, size_t size, int flags);
int fsetxattr(int fd, const char *name,
const void *value, size_t size, int flags);
説明
拡張属性は、inode (ファイル、ディレクトリ、シンボリックリンク等) に 関連付けられた name:value の対である。 これらは、システム上のすべての inode に関連付けられた通常の属性 (stat(2) が返すデータ) を拡張するものである。 拡張属性のコンセプトは attr(5) に書かれている。setxattr() は、ファイルシステム内の指定された path に対応する、名前 name の拡張属性の値 value を設定する。 value の size は必ず指定しなければならない。
lsetxattr() は setxattr() と同じだが、シンボリックリンクの場合に、リンクが参照しているファイル ではなく、リンクそのものの拡張属性を設定する点だけが異なる。
fsetxattr() は setxattr() と同じだが、 path の代わりに fd で参照されたオープン済みファイルの情報だけを設定する点が異なる (filedes は open(2) によって返される)。
拡張属性の名前 は普通のヌル終端された文字列である。 name には、名前空間を表す接頭辞 (prefix) が含まれる。 個々の inode に対して、互いに独立な名前空間が複数あってもよい。 拡張属性の値 value は、ある一定の長さの任意のテキスト・データまたは バイナリ・データの集合である。
操作の意味を明確にするために flags 引き数を使用することができる。 XATTR_CREATE は属性の作成だけを行うことを指定する。 指定された名前の属性がすでに存在する場合は失敗する。 XATTR_REPLACE は属性の置換だけを行うことを指定する。 指定された名前の属性がまだ存在しない場合は失敗する。 デフォルトでは (フラグを指定しない場合)、拡張属性は必要な場合は作成され、 属性がすでに存在する場合は属性値の置換を行う。
返り値
成功した場合、0 が返される。 失敗した場合、 -1 が返され、 errno に適切な値がセットされる。エラー
- EDQUOT
- ディスクのクォータ上限に達した。拡張属性を格納できるだけの空き領域がないことを意味する。
- EEXIST
- XATTR_CREATE が指定されたが、その属性はすでに存在している。
- ENOATTR
- XATTR_REPLACE が指定されたが、その属性が存在しない。(ENOATTR は <attr/xattr.h> で ENODATA の同義語として定義されている。)
- ENOSPC
- 拡張属性を記憶するのに十分なスペースが残っていない。
- ENOTSUP
- 拡張属性がそのファイルシステムでサポートされていない、もしくは無効になっている。 errno に ENOTSUP がセットされる。
上記に加えて、 stat(2) に書かれているエラーが発生する場合もある。
バージョン
これらのシステムコールはカーネル 2.4 以降の Linux で利用できる。 glibc でのサポートはバージョン 2.3 以降で行われている。準拠
これらのシステムコールは Linux 独自である。この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。