在 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:
内核的系统调用 read ssize_t read(int fd, void *buf, size_t count);
有 3 个参数,其中一个是 fd。很明显,read
能够以某种方式从单个文件(而不是 inode 内的所有文件)中读取。问题是如何。
最佳答案
您引用的问题答案中的代码就是您需要做的。是的,需要来自任务的 struct files_struct
,因为文件描述符仅在 files_struct
的上下文中有意义(通常,每个进程都有一个) .文件描述符不是全局唯一的,只是单个打开文件表中的索引。
如果您的代码在进程上下文中运行(例如,通过系统调用调用),那么您可以将current->files
用于当前任务的files_struct
。这就是 read()
所做的。
关于c - 从 Linux 内核模块的文件描述符获取文件名/路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17504859/