如何知道对应的inode号的路径

如何知道对应的inode号的路径

如果我知道索引节点引用,即

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 对象属于已安装的文件系统,在这种情况下,回溯将在安装点停止。

相关内容