一个非常基本的问题。通过提供文件的完全限定路径,尝试打开文件描述符时执行的步骤的确切顺序是什么?
我在寻找
文件确实是inode。
通常,给定文件在某个目录中有一些条目指向其索引节点。目录将名称映射到索引节点,目录是一种文件。请参见stat(2)以了解inode包含的内容(并可通过应用程序代码查询),尤其是各种文件类型(普通文件,目录,字符或块设备,fifo,symlink等)。因此,目录通常是字典(以各种特定于文件系统的方式实现)将字符串映射到inode。因此,在该目录中/bin/,通常存在一个bash与 bash shell(即/bin/bash)的ELF可执行文件的inode 关联的条目。使用readdir(3) -依次调用getdents(2) -读取目录中的条目。
/bin/
bash
/bin/bash
某些名称可能无法再访问给定的inode。当进程打开(2)-创建文件,然后取消链接(2)-创建文件(同时保留打开的文件描述符)时,尤其会发生这种情况。这是制作临时文件的首选方法。(当不再有进程使用它们时,它们将由内核释放)。
给定的inode有 _多个_指向它的目录条目也可能发生。(即文件具有“多个名称”)这是通过link(2)syscall发生的。(symlink文件是使用symlink(2)创建的)。
还参见path_resolution(7)和UNIX文件系统&文件系统&EXT2&EXT3&EXT4&BTRFS&文件系统的比较 wikipages。另请阅读此旧文件系统描述(有些细节很烂,但是总体思路在这里,尤其是VFS的作用)