ale*_*nst 5 c linux kernel kernel-module
在 linux 内核模块中,有没有办法从unsigned int fd?
我知道这个答案:如何从内核模块内的文件描述符获取文件名?但如果我理解正确的代码,我也需要一个struct files_struct。
编辑:
请停止投票,因为它不是重复的。我正在寻求一种从内核模块以纯 C 格式获取文件名/路径的方法,而不是使用系统工具。换句话说:在 /procself/fd/ 上运行 readlink不是一个好的答案。
编辑2:
内核的系统调用读取ssize_t read(int fd, void *buf, size_t count);需要 3 个参数,其中一个是 fd。很明显,以某种方式read能够读取单个文件(而不是 inode 中的所有文件)。问题是如何。
您引用的问题的答案中的代码就是您需要执行的操作。是的,struct files_struct任务中的 a 是必需的,因为文件描述符仅在 a 的上下文中才有意义files_struct(通常,每个进程都有一个)。文件描述符不是全局唯一的,只是单个打开文件表中的索引。
如果您的代码在进程上下文中运行(例如通过系统调用调用),那么您可以使用current->files当前任务的files_struct. 这就是read()作用。