如何从内核模块中的文件描述符中获取文件名?

如何从内核模块中的文件描述符中获取文件名?,第1张

如何从内核模块中的文件描述符中获取文件名?

不要调用

SYS_readlink
-使用与
procfs
读取其中一个链接时相同的方法。开始与代码中
proc_pid_readlink()
proc_fd_link()
fs/proc/base.c

从广义上讲,给予

int fd
struct files_struct *files
从你感兴趣的(你已采取的引用)的任务,你想做的事:

char *tmp;char *pathname;struct file *file;struct path *path;spin_lock(&files->file_lock);file = fcheck_files(files, fd);if (!file) {    spin_unlock(&files->file_lock);    return -ENOENT;}path = &file->f_path;path_get(path);spin_unlock(&files->file_lock);tmp = (char *)__get_free_page(GFP_KERNEL);if (!tmp) {    path_put(path);    return -ENOMEM;}pathname = d_path(path, tmp, PAGE_SIZE);path_put(path);if (IS_ERR(pathname)) {    free_page((unsigned long)tmp);    return PTR_ERR(pathname);}free_page((unsigned long)tmp);

如果您的代码在进程上下文中运行(例如,通过syscall调用),并且文件描述符来自当前进程,则可以将其

current->files
用于当前任务
structfiles_struct *



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4931307.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-12
下一篇2022-11-13

发表评论

登录后才能评论

评论列表(0条)

    保存