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

标签 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:

内核的系统调用 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/

相关文章:

c - Linux C-无法正确取消共享PID namespace

linux - 在中断中获取 current->pid

linux - 我可以使用其他发行版的内核升级我的内核吗?

java - 在 Java 上运行 JTape 库(java 库路径)

c++ - realloc() 的性能消耗

java.lang.运行时异常 "Cannot run program"

linux - linux系统上的/proc/self/fd/socket文件是什么意思以及如何找到端口

linux - make-kpkg 在 Fedora 20 中不工作

objective-c - C代码中的内存泄漏

c - 传递 ‘strcat’ 的参数 2 使指针来自整数而不进行强制转换 [-Wint-conversion]