我必须在我的一些 C 项目中使用 dirent.h。根据网上找到的各种不同的描述,我得出一个模糊的想法:目录项是一种数据结构,它告诉我们有关文件的一切。目录条目到底是什么?
答案1
并非有关文件的所有内容,有关文件的大部分元数据都存储在文件 inode 中,而不是目录条目中。目录项只是一个索引节点和文件名的结构 - 足够的信息可以从文件名转换为索引节点并获取实际文件。
您可以放心地将目录想象为字典:
filename1 :> inode1
filename2 :> inode2
....
然后,您只需跟踪索引节点号(基本上是索引节点的唯一地址——一种指针)并找到所有权限、所有权数据、日期、扩展属性,当然还有文件的内容(如果它是一个文件) 。当然,目录项也可以是另一个目录、符号链接、设备节点或类似的东西。你必须去那里才能弄清楚。
答案2
目录项基本上是文件名到其索引节点的映射。用户通常通过文件名访问文件,但是内核无法理解此类文件名。
内核使用文件唯一的索引节点来识别文件。
这个inode基本上包含了文件除了文件名和文件中的实际数据之外的所有数据。文件名到索引节点的这种映射是在称为目录项的数据结构中维护的。
请记住,许多条目(在相同或不同的目录中)可能标识相同的文件(相同的 inode)。所以,给定一个名字,你就可以很容易地获得它的inode;给定一个索引节点,查找名称要困难得多(find
实用程序就是实现此目的的工具)。