Linux内核的dentry和inode

4

从给定的dentry和inode是否可以构建绝对路径?

谢谢大家


你能迭代地上升 d_parent 并跟踪 d_name 吗? - chrisaycock
是的,这是可能的,我已经做过了...但是,如果给定的dentry是一个挂载的文件系统(来自USB、NFS或其他任何地方),d_parent将停止直到该文件系统的根目录...假设/dev/sda1被挂载在/tmp/a/b/c/d/e/(* /dev/sda1的根目录*),最顶部的d_parent值将在"e"目录之后。 - Billy The Bob
1
@Billy 你希望有不同的解决方案吗? - chrisaycock
@Billy 我明白了。也许你需要检查 vfsmount - chrisaycock
你想处理 chroot 和 pivot root 吗? - J-16 SDiZ
3个回答

1

1

看一下dentry_path()。它会将缓冲区填充到挂载点的根路径。要继续前进,您需要遍历文件的f_vfsmount和它的mnt_parent,直到到达文件系统的真正根目录。


1

是的,只需要一个dentry,通过dentry->parent向后遍历即可。 当你遇到挂载点时要小心,因为Linux支持“一个dentry可以挂载多个设备”……好吧,编码很容易,只需切换到vfsmnt->mnt_parent。

顺便说一句:当我写这个答案时,我经常被困惑为什么Linux使用“mnt_parent”而不是“mnt_child”字段来构建挂载点链接列表,现在我似乎猜出了一些原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接