Linux文件系统:扩展属性与目录操作详解
1. 用户命名空间与扩展属性
1.1 用户命名空间概述
用户命名空间是常规进程使用的标准命名空间。内核通过普通文件权限位来控制对该命名空间的访问。读取现有键的值时,进程必须对给定文件具有读取权限;创建新键或向现有键写入值时,进程必须对给定文件具有写入权限。需要注意的是,只能将用户命名空间中的扩展属性分配给常规文件,而不能分配给符号链接或设备文件。在设计使用扩展属性的用户空间应用程序时,用户命名空间是一个不错的选择。
1.2 扩展属性操作
POSIX定义了应用程序可以对给定文件的扩展属性执行的四种操作:
1. 给定一个文件,返回该文件所有已分配的扩展属性键的列表。
2. 给定一个文件和一个键,返回相应的值。
3. 给定一个文件、一个键和一个值,将该值分配给该键。
4. 给定一个文件和一个键,从该文件中移除该扩展属性。
对于每种操作,POSIX提供了三种系统调用:
1. 对给定路径名进行操作的版本;如果路径引用的是符号链接,则对链接的目标进行操作(通常行为)。
2. 对给定路径名进行操作的版本;如果路径引用的是符号链接,则对链接本身进行操作(系统调用的标准l变体)。
3. 对文件描述符进行操作的版本(系统调用的标准f变体)。
以下是这12种组合的详细介绍:
1.2.1 检索扩展属性
检索扩展属性的系统调用如下:
#include <sys/types.h> #include &l