UNIX在哪里存储每个文件的打开文件偏移量、权限和名称/链接列表?
我有一些关于UNIX的问题UNIX在哪里存储每个文件的打开文件偏移量、权限和名称/链接列表?,unix,Unix,我有一些关于UNIX的问题 UNIX在哪里存储与每个打开的文件关联的偏移量?在i节点中?在数据块中?其他地方 UNIX在哪里存储打开每个文件的权限(只读等) UNIX在哪里存储与i节点关联的名称/链接列表 文件偏移量存储在文件描述中,并且有一个全局(系统范围)文件描述表。每个进程中的文件描述符用于访问文件描述。不存储权限:仅在打开文件时检查权限。与inode关联的链接列表存储在文件系统的目录中。实际上,目录的合理定义是“指向inode的链接列表”。有一个重要的区别,您似乎忽略了,更具体地说,就是
文件偏移量存储在文件描述中,并且有一个全局(系统范围)文件描述表。每个进程中的文件描述符用于访问文件描述。不存储权限:仅在打开文件时检查权限。与inode关联的链接列表存储在文件系统的目录中。实际上,目录的合理定义是“指向inode的链接列表”。有一个重要的区别,您似乎忽略了,更具体地说,就是磁盘数据和内存数据之间的区别:
- 目录和文件内容、访问权限、扩展属性以及在系统重新启动后预期会持续存在的任何其他内容(例如,系统重新启动)存储在永久存储的文件系统中,通常存储在i节点中。例如,文件的所有者、组和权限通常存储在i节点中
- 与文件系统当前操作相关的任何内容,如打开的文件描述符、文件偏移量和缓存数据,都保存在计算机内存中的内核空间数据结构中
应该指出的是,现代文件系统往往会模糊数据和元数据之间的界限。例如,扩展属性可以存储在数据块中,或者非常小的文件可以完全打包在它们自己的i节点中。有些文件系统甚至没有专用的数据块或i节点。对于您所谓的“权限”来说,可能更好的术语是“访问模式”(因为您说的是“打开每个文件时使用的权限”)。打开文件时使用的访问模式位于打开文件描述表中(可从文件描述符轻松访问),但访问模式未通过
fcntl()
更改。或者:目录是“索引节点的(简单)名称列表”。Simple表示目录中的名称不包含斜杠'/'
(或ASCII NUL'\0'
)。