如何从给定的inode获取路径名或dentry或struct文件?

时间:2011-12-19 02:09:54

标签: linux-kernel kernel inode pathname

我需要知道如何从给定的inode获取路径名或dentrystruct file

我使用file_open从路径名中获取struct file,但总是给内核恐慌。我需要一种方法来比较我的inode列表中的inode和路径名中的inode,或者比较磁盘中的所有inode以找到相应的路径名,然后与我的inode列表进行比较。

2 个答案:

答案 0 :(得分:2)

此示例代码在Linux内核版本2.6.xx

中运行良好
struct dentry *sample_dentry = NULL;
struct inode *tmp_inode = &inode_need_to_get;
struct list_head *tmp_list = NULL;
list_for_each(tmp_list, &(tmp_inode->i_dentry))
{
    sample_dentry = list_entry(tmp_list, struct dentry, d_alias);
    printk(KERN_EMERG, "name of file is %s\n", sample_dentry->d_iname);
}

如果此文件具有硬链接,则每个inode对象都将具有一个或多个dentries对象。

答案 1 :(得分:1)

一般来说,这很难做到。

inode可能有数千个路径名。所有名称都同样“有效”。即使在不支持多个链接的文件系统上,该文件也可以绑定挂载数千次到系统中的任何其他位置。

AppArmorTOMOYO mandatory access control系统都依赖于路径名 - 但巨大的差异:访问控制是针对特定的文件描述符,使用特定名称打开,两个工具都使用 特定名称。

查看security/apparmor/path.c函数aa_get_name()security/tomoyo/file.c函数tomoyo_get_realpath(),了解有关从inode查找路径名的详细信息 - 给出其他支持信息。从普通的inode对象,我想你可能运气不好。