说明

扩展属性是与inode关联的name:value对(文件,目录,符号链接等)。它们是与系统中所有inode关联的常规属性的扩展(即stat(2)数据)。扩展属性概念的完整概述可以在xattr(7)中找到。

setxattr()设置由名称标识并与文件系统中给定路径关联的扩展属性的值。 size参数指定值的大小(以字节为单位);零长度值是允许的。

lsetxattr()与setxattr()相同,只是在符号链接的情况下,扩展属性是在链接本身而不是它所引用的文件上设置的。

fsetxattr()与setxattr()相同,只是在fd引用的打开文件(由open(2)返回)上设置扩展属性来代替path。

扩展属性名称是一个以空字符结尾的字符串。该名称包括名称空间前缀;可能有几个与单个inode关联的不相交的名称空间。扩展属性的值是指定长度的任意文本或二进制数据块。

默认情况下(即标志为零),如果扩展属性不存在,则将创建扩展属性;如果属性已存在,则将替换该值。要修改这些语义,可以在标志中指定以下值之一:

XATTR_CREATE
执行纯创建,如果指定属性已存在,创建将失败。
XATTR_REPLACE
执行纯替换操作,如果指定属性不存在,该操作将失败。
SETXATTR - Linux手册页

Linux程序员手册 第2部分
更新日期: 2019-08-02

语法

#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);

错误说明

EDQUOT
磁盘配额限制意味着没有足够的剩余空间来存储扩展属性。
EEXIST
指定了XATTR_CREATE,并且该属性已经存在。
ENODATA
指定了XATTR_REPLACE,并且该属性不存在。
ENOSPC
剩余空间不足,无法存储扩展属性。
ENOTSUP
名称的名称空间前缀无效。
ENOTSUP
文件系统不支持扩展属性,或者禁用了扩展属性,
EPERM
该文件被标记为不可变或仅附加。 (请参阅ioctl_iflags(2)。)

此外,stat(2)中记录的错误也可能发生。

ERANGE
名称或值的大小超过了文件系统特定的限制。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

遵循规范

这些系统调用是特定于Linux的。

名称

setxattr,lsetxattr,fsetxattr-设置扩展属性值

版本

从内核2.4开始,这些系统调用已经在Linux上可用了。从2.3版开始提供glibc支持。

返回值

成功时,返回零。失败时,将返回-1并正确设置errno。

另外参见

getfattr(1),setfattr(1),getxattr(2),listxattr(2),open(2),removexattr(2),stat(2),symlink(7),xattr(7)

日期:2019-08-20 17:58:43 来源:oir作者:oir