我有一个函数,通过从子目录的“..”目录项中获取父目录的 inode id,从子目录回溯到根目录。此回溯的主要目的是识别用户输入的路径的相对路径名。
我知道子 inode id 可以进行上述回溯,但这样做时遇到了问题。撤离后,子目录和父目录的 inode 编号不同,因此在使用“..”进行回溯时,dotdot 给出的是前一个编号的 inode id,而不是撤离后的 inode 编号。
为什么dotdot的inode id和更新后的inode id不一样?
答案1
我没有声誉发表评论,所以我必须回答你的问题,即使我不能完全理解你的意思
更新后的 inode id
好的,要获取从根目录到您所在目录的路径,我们需要反向操作。首先,您必须获取您所在目录的 inode 编号(从条目中获取.
),然后通过条目到达父目录..
,然后在父目录中搜索,查找具有与您在开始时获得的相同 inode 编号的目录。这是父目录中此目录条目的名称。这样,您将了解此目录.
在父目录中的调用方式...重复此迭代,您将获得您的父目录名称...依此类推,直到....什么?
好的,根目录有一个..
指向其自身的条目(确实如此.
),您必须将上次获得的 inode 编号与本次迭代获得的 inode 编号进行比较,如果它们的 inode 编号相同,则停止。到达此特殊目录后,您将获得一个必须反转的名称列表,在它们之间加上斜线 /,这样您就会获得实际目录的路径。
如果您不在根文件系统中,内核就会发挥您到达父目录所需的魔力(它会..
通过挂载点跟踪条目,而忽略该..
条目指向自身),然后您将正确获得根目录的路径,因此您可以按照此方法操作,直到获得.
并..
指向相同的 inode。
我希望这可以完全回答你的问题。