getea 子例程
用途
读取扩展属性的值。
语法
#include <sys/ea.h>
ssize_t getea(const char *path, const char *name,
void *value, size_t size);
ssize_t fgetea(int filedes, const char *name, void *value, size_t size);
ssize_t lgetea(const char *path, const char *name,
void *value, size_t size);
描述
扩展属性是与文件系统对象 (例如文件,目录和符号链接) 关联的 "名称: 值" 对。 它们是与文件系统中所有对象 (即 stat (2) 数据) 相关联的正常属性的扩展。
请勿定义带有 8 个字符前缀 "(0xF8) SYSTEM (0xF8)"的扩展属性名称。 前缀 "(0xF8) SYSTEM (0xF8)" 仅保留供系统使用。
注: 0xF8 前缀表示不可打印的字符。
getea 子例程检索由 name 标识并与文件系统中的给定 path 相关联的扩展属性的值。 返回属性 value 的长度。 fgetea 子例程与 getea相同,只是它采用文件描述符而不是路径。 lgetea 子例程与 getea相同,但对于符号链接,链接本身是被查询的,而不是它所引用的文件。
参数
| 项 | 描述 |
|---|---|
| 路径 | 文件的路径名。 |
| 名称 | 扩展属性的名称。 扩展属性名称是以 NULL 结束的字符串。 |
| value | 指向将在其中存储属性的缓冲区的指针。 扩展属性的值是指定长度的不透明字节流。 |
| 大小 | 缓冲区的大小。 如果大小为 0 ,那么 getea 返回指定扩展属性的当前大小,此大小可用于估算缓冲区的大小是否足以容纳与扩展属性相关联的值。 |
| 文件管理器 | 文件的文件描述符。 |
返回值
如果 getea 子例程成功,那么将返回一个非负数,指示扩展属性值的大小。 一旦失败,将返回-1并适当设置errno。
错误代码
| 项 | 描述 |
|---|---|
| EACCES | 调用者缺少对基本文件的读许可权,或者缺少对指定属性 read的相应 ACL 特权。 |
| Efault | 为 path, name或 value传递了错误地址。 |
| EFORMAT | 文件系统能够支持 EAs ,但 EAs 处于禁用状态。 |
| EINVAL | 不应使用类似路径的名称 (例如 zml/file, )。 和 ..)。 |
| ENAMETOOLONG | path 或 name 值太长。 |
| ENOATTR | 指定的属性不存在,或者进程没有对此属性的访问权。 |
| ERANGE | 值缓冲区的大小太小,无法保存结果。 |
| ENOTSUP | 文件系统不支持扩展属性。 |
此处还适用针对 stat (2) 系统调用记录的错误。