5

在 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 中的所有文件)。问题是如何。

4

1 回答 1

3

您引用的问题的答案中的代码是您需要做的。是的,需要struct files_struct来自任务的 a,因为文件描述符仅在 a 的上下文中有意义files_struct(通常,每个进程都有一个)。文件描述符不是全局唯一的,只是单个打开文件表中的索引。

如果您的代码在进程上下文中运行(例如,通过系统调用调用),那么您可以使用current->files当前任务的files_struct. 这就是这样read()做的。

于 2013-07-07T13:33:57.640 回答