在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中的所有文件)中读取。问题是如何。
答案 0 :(得分:3)
您引用的问题答案中的代码是您需要做的。是的,需要来自任务的struct files_struct
,因为文件描述符仅在files_struct
的上下文中有意义(通常,每个进程都有一个)。它们不是全局唯一的,只是单个打开文件表中的索引。
如果您的代码在进程上下文中运行(例如,通过系统调用调用),那么您可以将current->files
用于当前任务的files_struct
。这就是read()
的作用。