setxattr, lsetxattr, 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 独自である。
getfattr(1),
setfattr(1),
getxattr(2),
listxattr(2),
open(2),
removexattr(2),
stat(2),
attr(5),
symlink(7)
この man ページは Linux
man-pages
プロジェクトのリリース
3.79 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。