如何通过在内核中使用struct file *来获取文件名?

时间:2013-06-18 16:55:20

标签: c linux linux-kernel

我想知道调用函数/sys/*的{​​{1}}中的哪个文件。问题是如何通过static ssize_t sysfs_write_file(struct file *file, const char __user *buf, size_t count, loff_t *ppos)来获取文件名/路径?

struct file *file

修改 的 我知道inode与名称之间没有一对一的映射,但我必须知道major / minor / file描述符,并且可以在文件系统中搜索一些inode的名称。

2 个答案:

答案 0 :(得分:3)

在Linux和其他类Unix操作系统中,文件对象可以由任意数量的名称指向,文件对象本身没有指向任何名称的指针。名称不是文件的功能,它们只是一个外部索引。

答案 1 :(得分:3)

Actuall您可以检索用于打开文件的文件路径。在linux中,struct file表示一个打开的文件,并且具有用于打开与该结构关联的文件的路径。在2.6.20之前,它是一个名为f_dentry的成员,从2.6.20开始,它是一个名为f_path的新成员。您可以使用函数d_path()直接检索文件的完整路径。

请参阅以下Linux源代码:

http://lxr.free-electrons.com/source/include/linux/fs.h?v=3.10#L763

http://lxr.free-electrons.com/source/fs/dcache.c?v=3.0#L2626

还回答: How can I get a filename from a file descriptor inside a kernel module?