如何从内核模块内的文件描述符获取文件名?
我需要从我编写的一个小型 Linux 内核模块内的给定文件描述符获取文件名。我尝试了从 C 中的文件描述符获取文件名中给出的解决方案,但由于某种原因,它打印出垃圾值(如解决方案中所述,在 /proc/self/fd/NNN
上使用 readlink
)。我该怎么做呢?
I need to get the name of a file from a given file descriptor, inside a small linux kernel module that I wrote. I tried the solution given at Getting Filename from file descriptor in C, but for some reason, it prints out garbage values (on using readlink
on /proc/self/fd/NNN
as mentioned in the solution). How can I do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不要调用
SYS_readlink
- 使用与读取其中一个链接时procfs
相同的方法。从fs/proc/base.c
中的proc_pid_readlink()
和proc_fd_link()
中的代码开始。一般来说,给定您感兴趣的任务(您已引用)的
int fd
和struct files_struct *files
,您想要执行以下操作 :您的代码在进程上下文中运行(例如通过系统调用调用)并且文件描述符来自当前进程,那么您可以使用
current->files
作为当前任务的struct文件结构体*。
Don't call
SYS_readlink
- use the same method thatprocfs
does when one of those links is read. Start with the code inproc_pid_readlink()
andproc_fd_link()
infs/proc/base.c
.Broadly, given an
int fd
and astruct files_struct *files
from the task you're interested in (which you have taken a reference to), you want to do:If your code is running in process-context (eg. invoked through a syscall) and the file descriptor is from the current process, then you can use
current->files
for the current task'sstruct files_struct *
.