如果我知道索引节点引用,即
struct inode *inode;
struct dentry 结构将包含 d_iname 变量中特定 dentry 的路径信息。
如何从 &inode->i_dentry 映射得知相应 inode 的路径?另外如何从 struct inode 映射到 struct dentry?
答案1
在一般情况下,你不能。 inode 和目录条目之间不存在一一对应的关系:
$ touch file1.txt
$ ln file1.txt file2.txt
$ ls -li file*.txt
1332145968 -rw-r--r-- 2 mark mark 0 Oct 17 17:02 file1.txt
1332145968 -rw-r--r-- 2 mark mark 0 Oct 17 17:02 file2.txt
哪一条路径是 inode 的“真实”路径1332145968
?
$ rm file2.txt
$ tail -f file1.txt &
[1] 7781
$ rm file1.txt
现在呢?正如您可以看到的那样, inode1332145968
仍在使用中lsof
,但它没有路径。
答案2
您可以使用 d_entry 中的 d_parent 字段并保存名称来跟踪路径。这将带您到达文件系统的根目录。但要小心,如果 inode 对象属于已安装的文件系统,在这种情况下,回溯将在安装点停止。