不要调用
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 *。



