一个非常基本的问题。当我尝试打开文件描述符时,通过提供文件的完全限定路径,执行的步骤的确切顺序是什么。
我正在寻找
答案 0 :(得分:4)
当我们调用" open(filepath)"
时,内核执行以下步骤有关内部算法的完整信息,您可能需要参考伟大的经典着作" UNIX操作系统的设计"由Maurice J Bach 以详细的方式描述这些概念和实施。
答案 1 :(得分:3)
除了tmp's answer:
文件确实是inodes。
通常,给定文件在某个目录中有一些指向其inode的条目。 Directories是将名称映射到inode,目录是一种文件。有关inode包含的内容(可以通过应用程序代码查询),请参阅stat(2),特别是各种文件类型(普通文件,目录,字符或块设备,fifo,符号链接......)。因此,目录通常是一个字典(以各种特定于文件系统的方式实现)将字符串映射到inode。因此,在目录/bin/
中,通常会有一个条目将bash
与 bash shell的ELF可执行文件的inode相关联(即/bin/bash
)。使用readdir(3) - 然后依次调用getdents(2) - 来读取目录中的条目。
可能会发生某个名称无法再访问给定的inode。特别是当进程open(2)处理文件,然后unlink(2)处理它(同时保留打开的文件描述符)时,会发生这种情况。这是制作临时文件的首选方法。 (当没有更多进程使用它们时,内核将释放它们。)
也可能发生给定的inode具有指向它的几个目录条目。 (即文件具有“多个名称”)这种情况发生在link(2)系统调用中。 (使用symlink(2)创建符号链接文件。)
另请参阅path_resolution(7)和unix file system& file system& ext2& ext3& ext4& btrfs& comparison of file systems wikipages。另请阅读这个旧的file system描述(有些细节很糟糕,但总体思路就在这里,特别是VFS的作用)