解析Linux上符号链接的算法应该是什么样子?解析符号链接算法
喜欢的东西:
拆分路径步骤
/usr/bin/hello
- >['usr', 'bin', 'hello']
首先解决
/usr
- >/something1
添加下一步和解决
/something1/bin
- >/something2
添加下一个步骤,解决
/something2/hello
- >/something3
请问这项工作?
解析Linux上符号链接的算法应该是什么样子?解析符号链接算法
喜欢的东西:
拆分路径步骤/usr/bin/hello
- >['usr', 'bin', 'hello']
首先解决/usr
- >/something1
添加下一步和解决/something1/bin
- >/something2
添加下一个步骤,解决/something2/hello
- >/something3
请问这项工作?
基本上,当你请求一个I/O,内核要经过一系列的步骤。内核需要搜索所需文件的目录,这不是问题,因为内核始终知道从哪里开始,因为根文件具有一个不变的inode编号,它是inode 2文件系统的ext系列。一旦内核找到目录中的文件名,内核就会将文件名转换为inode编号。由于每个目录只是一种特殊的文件,它通过(文件名,inode)字段保存每个条目的条目,通过搜索目录,内核将能够找到文件的inode。
一旦内核发现文件的inode,这个inode就会保存常规文件的块地址,因此将用于查找存储在该文件中的数据。文件的块地址保存存储在文件中的实际数据。 *常规文件和符号链接文件的区别在于,符号链接文件是指向另一个位置的文件,因此内核必须执行两次相同的一系列步骤,也就是说,当找到符号链接文件的inode时内核必须重新执行符号链接文件指向的文件路径的相同操作,它必须在目录中搜索并在目录中查找匹配的文件名以获取inode编号。这显然增加了开销。
递归(a.k.a cyclic)符号链接是无效的符号链接。
不知道我是否已经回答了您的问题,但通常情况下,您的顶部和下方都有VFS层,即物理文件系统。有些文件系统甚至不支持符号链接,比如vfat。
通过“解决”,你的意思是形成一个路径到不包含符号链接的文件?在这种情况下,你必须提供一些额外的细节,包括(1)符号链接可以指向另一个符号链接; (2)符号链接可以指向多组件路径(其任何组件可以是符号链接); (3)符号链接可以是绝对链接或相对链接; (4)符号链接可以指向一个不存在的路径。 –
@JohnBollinger他们可以递归吗? – Vad
“递归”是什么意思? – melpomene