读取目录以查看文件到 inode 的映射

读取目录以查看文件到 inode 的映射

我刚刚学习文件系统,据说目录只是一个普通文件,它保存文件索引节点对的列表。

Downloads如果我尝试使用以下任何命令打开目录cat less tail,它只会输出它是一个目录并且无法打开。

想法如何阅读?

答案1

更正:目录是文件名-inode 对的列表。它不是“普通”文件。与符号链接、套接字和设备节点一样,它的行为与普通文件不同。

从 shell 中,您可以看到 的映射ls -i

从C中,返回的结构体readdir()包含ad_name和ad_ino元素,从中也可以看到这种映射。

从用户空间来看,目录将文件名映射到 inode 的事实通常并不那么重要,因为内核要求您无论如何都按文件名来指定文件。它不允许您通过索引节点号请求文件。

符号链接是文件类型的另一个示例,其中包含无法像使用系统调用(如read().像普通文件一样,它包含数据。在这种情况下,数据具有特殊含义:它是命名符号链接目标的路径名(这是一个字符串)。与普通文件不同,内容不是使用write()but with写入,也不是使用but withsymlink()读取内容。read()readlink()

答案2

目录就像文件一样,但内核通过仅允许某些系统调用打开、读取和写入目录条目来限制访问。以下是 C 函数差异的一些示例:

File      Directory
open()    opendir()
read()    readdir()
write()   N/A
close()   closedir()

答案3

它还取决于操作系统。我不知道具体的解释,但在这方面经历了 Linux 和 Unix 行为的差异。特别是 FreeBSD,您可以使用cat一个目录。我第一次尝试的时候就把我甩掉了。

相关内容