文件扩展属性xattr系统调用浅析 --翻译

前言 本文为原创,可能会存在一些知识点或理解上的问题,欢迎切磋和交流  ^_^

1、listxattr/llistxattr/flistxattr系统调用名称

Listxattr/llistxattr/flistxattr作用:列出扩展属性名称

1.1 概要

#include <types.h>

#include <sys/xattr.h>

ssize_t  listxattr(const char *path, char *list, size_t size);

ssize_t  llistxattr(const char *path, char *list, size_t size);

ssize_t  flistxattr(int fd, char *list, size_t size);

1.2 系统调用描述

扩展属性以名称-键值对的形式存在,这些名称-键值对和文件、目录、软链接等的inode相关。它们是对linux系统和所有inode相关联的一些常规属性的扩展。

listxattr

获取文件系统对应path路径文件的扩展属性名称的列表。List指向的buffer用于存放获取到的扩展属性名称列表,这个buffer大小由调用者传入的size决定,size单位为字节。列表格式为一系列名称的集合,字符串最后以’\0’结尾。对于没有访问权限的调用进程的扩展属性名称会被省略。最后只返回扩展属性名称列表的长度。

Llistxattr

llistxattr和listxattr相同,但是区别在于针对软链接文件时,llistxattr系统调用获取到的是软链接文件的扩展属性名称列表,而不是软链接指向文件的扩展属性名称列表。

flistxattr

flistxattr和listxattr相同,但是区别在于传入的参数是文件描述符fd,而不是一个路径名称。

一条扩展属性名称是一个以’\0’结尾的字符串。这个扩展属性名称包括一个命名空间前缀,或者有几个和该inode相关联的命名空间。如果size指定为0,则这些系统调用返回扩展属性名称的当前大小(至少要保证这些扩展属性名称列表不变)。Size主要用来保证这些系统调用存放扩展属性名称列表的buffer的大小。(但是请注意,两次系统调用的扩展属性名称列表集合可能会发生变化,所以第二次系统调用需要检查一下返回值的状态)。

​​​​​​​1.3 举例说明

扩展属性名称列表是以’\0’结尾的字符串,如下所示:

User.name1\0system.name1\0user.name2\0

支持POSIX ACls文件权限管理的文件系统的扩展属性名称列表如下所示:

system.posix_acl_access\0system.posix_acl_default\0

2、getxattr/lgetxattr/fgetxattr

getxattr/lgetxattr/fgetxattr作用是获取扩展属性值

​​​​​​​2.1 摘要

#include <sys/types.h>

#include <sys/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 fd, const char *name, void *value, size_t size);

2.2 ​​​​​​​ 系统调用描述

扩展属性以名称-键值对的形式存在,这些名称-键值对和文件、目录、软链接等的inode有关。它们是对linux系统和所有inode相关联的一些常规属性的扩展。

getxattr

获取和传入的name和path相关联的文件扩展属性的值。扩展属性值被存放在value指向的buffer内存中。Size表示该buffer大小,系统调用返回值是扩展属性值的字节个数。

lgetxattr

lgetxattr和getxattr相同,但是区别在于针对软链接文件时,lgetxattr系统调用获取的软链接文件的扩展属性值,而不是软链接指向文件的扩展属性值。

fgetxattr

fgetxattr和getxattr相同,但是区别在于传入的参数是文件描述符fd,而不是一个路径名称。

一条扩展属性名称是一个以’\0’结尾的字符串。这个扩展属性名称包括一个命名空间前缀,或者有几个和该inode相关联的命名空间。扩展属性值是由setxattr分配的任意文本或二进制数据内容的一部分。如果size指定为0,则这些系统调用返回扩展属性值的当前大小(至少要保证这些扩展属性值不变)。Size主要用来保证这些系统调用存放扩展属性值的buffer的大小。(但是请注意,两次系统调用的扩展属性值可能会发生变化,所以第二次系统调用需要检查一下返回值的状态)。

​​​​​​​2.3 返回值

0表示成功

非负数表示返回的是扩展属性值的大小(以字节为单位);

-1表示系统调用失败;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值