从Linux内核模块的文件描述符中获取文件名/路径?

时间:2013-07-06 16:32:10

标签: c linux kernel kernel-module

在Linux内核模块中有没有办法从unsigned int fd获取文件名/路径?

我知道这个答案:How can I get a filename from a file descriptor inside a kernel module?但如果我理解正确的代码,我也需要struct files_struct

编辑:

请停止投票,因为它不是重复的。我想要一种方法从内核模块中获取普通C中的文件名/路径,而不是使用系统工具。 换句话来说:在/ procself / fd /上运行readlink是不是一个好的答案。

编辑2:

内核的系统调用读取ssize_t read(int fd, void *buf, size_t count);有3个参数,其中一个是fd。很明显,read能够从单个文件(而不是inode中的所有文件)中读取。问题是如何。

1 个答案:

答案 0 :(得分:3)

您引用的问题答案中的代码是您需要做的。是的,需要来自任务的struct files_struct,因为文件描述符仅在files_struct的上下文中有意义(通常,每个进程都有一个)。它们不是全局唯一的,只是单个打开文件表中的索引。

如果您的代码在进程上下文中运行(例如,通过系统调用调用),那么您可以将current->files用于当前任务的files_struct。这就是read()的作用。