我刚刚学习文件系统,据说目录只是一个普通文件,它保存文件索引节点对的列表。
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
一个目录。我第一次尝试的时候就把我甩掉了。