为什么 dotdot 的 inode id 没有更新的 inode id?

为什么 dotdot 的 inode id 没有更新的 inode id?

我有一个函数,通过从子目录的“..”目录项中获取父目录的 inode id,从子目录回溯到根目录。此回溯的主要目的是识别用户输入的路径的相对路径名。

我知道子 inode id 可以进行上述回溯,但这样做时遇到了问题。撤离后,子目录和父目录的 inode 编号不同,因此在使用“..”进行回溯时,dotdot 给出的是前一个编号的 inode id,而不是撤离后的 inode 编号。

为什么dotdot的inode id和更新后的inode id不一样?

答案1

我没有声誉发表评论,所以我必须回答你的问题,即使我不能完全理解你的意思

更新后的 inode id

好的,要获取从根目录到您所在目录的路径,我们需要反向操作。首先,您必须获取您所在目录的 inode 编号(从条目中获取.),然后通过条目到达父目录..,然后在父目录中搜索,查找具有与您在开始时获得的相同 inode 编号的目录。这是父目录中此目录条目的名称。这样,您将了解此目录.在父目录中的调用方式...重复此迭代,您将获得您的父目录名称...依此类推,直到....什么?

好的,根目录有一个..指向其自身的条目(确实如此.),您必须将上次获得的 inode 编号与本次迭代获得的 inode 编号进行比较,如果它们的 inode 编号相同,则停止。到达此特殊目录后,您将获得一个必须反转的名称列表,在它们之间加上斜线 /,这样您就会获得实际目录的路径。

如果您不在根文件系统中,内核就会发挥您到达父目录所需的魔力(它会..通过挂载点跟踪条目,而忽略该..条目指向自身),然后您将正确获得根目录的路径,因此您可以按照此方法操作,直到获得...指向相同的 inode。

我希望这可以完全回答你的问题。

相关内容