在Linux内核模块中,有没有一种方法可以从文件名/路径中获取文件名/路径?unsigned int fd
?
我知道这个答案:如何从内核模块内的文件描述符获取文件名? https://stackoverflow.com/questions/8250078/how-can-i-get-a-filename-from-a-file-descriptor-inside-a-kernel-module但如果我正确理解代码,我需要一个struct files_struct
too.
EDIT:
请停止投票,因为它不是重复的。我正在寻求一种从内核模块获取纯 C 格式的文件名/路径的方法,而不是使用系统工具。
换句话说:在 /procself/fd/ 上运行 readlink 是not一个很好的答案。
EDIT 2:
内核的系统调用读取ssize_t read(int fd, void *buf, size_t count);
需要 3 个参数,其中一个是 fd。很明显,以某种方式read
能够读取单个文件(而不是 inode 内的所有文件)。问题是如何。
您引用的问题的答案中的代码就是您需要执行的操作。是的,一个struct files_struct
需要来自任务,因为文件描述符仅在任务上下文中有意义files_struct
(通常,每个进程都有其中一个)。文件描述符不是全局唯一的,只是单个打开文件表中的索引。
如果您的代码在进程上下文中运行(例如通过系统调用调用),那么您可以使用current->files
对于当前任务的files_struct
。这是什么read()
does.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)