解析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