SETXATTR - Linux手册页
Linux程序员手册 第2部分
更新日期: 2019-08-02
名称
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)数据)。扩展属性概念的完整概述可以在xattr(7)中找到。
setxattr()设置扩展属性的值,该扩展属性由名称标识并与文件系统中的给定路径相关联。 size参数指定值的大小(以字节为单位);零长度值是允许的。
lsetxattr()与setxattr()相同,只是在符号链接的情况下,扩展属性是在链接本身而不是它所引用的文件上设置的。
fsetxattr()与setxattr()相同,仅在fd引用的打开文件(由open(2)返回)上设置扩展属性代替path。
扩展属性名称是一个以空字符结尾的字符串。该名称包括名称空间前缀;可能有几个与单个inode关联的不相交的名称空间。扩展属性的值是指定长度的任意文本或二进制数据块。
默认情况下(即标志为零),如果扩展属性不存在,则将创建扩展属性;如果属性已存在,则将替换该值。要修改这些语义,可以在标志中指定以下值之一:
- XATTR_CREATE
- 执行纯创建,如果指定属性已存在,创建将失败。
- XATTR_REPLACE
- 执行纯替换操作,如果指定的属性不存在,该操作将失败。
返回值
成功时,返回零。失败时,将返回-1并正确设置errno。
错误说明
- EDQUOT
- 磁盘配额限制意味着没有足够的剩余空间来存储扩展属性。
- EEXIST
- 指定了XATTR_CREATE,并且该属性已经存在。
- ENODATA
- 指定了XATTR_REPLACE,并且该属性不存在。
- ENOSPC
- 剩余空间不足,无法存储扩展属性。
- ENOTSUP
- 名称的名称空间前缀无效。
- ENOTSUP
- 文件系统不支持扩展属性,或者禁用了扩展属性,
- EPERM
- 该文件被标记为不可变或仅附加。 (请参阅ioctl_iflags(2)。)
此外,stat(2)中记录的错误也可能发生。
- ERANGE
- 名称或值的大小超过了文件系统特定的限制。
版本
从内核2.4开始,这些系统调用已在Linux上可用。从2.3版开始提供glibc支持。
遵循规范
这些系统调用是特定于Linux的。
另外参见
getfattr(1),setfattr(1),getxattr(2),listxattr(2),open(2),removexattr(2),stat(2),symlink(7),xattr(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。