【发布时间】:2013-07-06 16:32:10
【问题描述】:
在 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 中的所有文件)。问题是如何。
【问题讨论】:
-
在硬链接的情况下,一个文件可能有多个路径 - 你怎么知道你得到了正确的路径?
-
@CarlNorum 也许这可以通过返回一个字符串数组来规避。
-
我需要获取当前用于访问该文件的任何路径。所以,/path/to/file.txt 和 /another/path/to/myfile.md 都可以。
-
不使用
/proc/self/fd,你只能得到使用fstat的inode,但是that's it,除非你要遍历整个文件系统。路径指向一个 inode,而不是相反。
标签: c linux kernel kernel-module