我有filedescriptor,喜欢获得真正的路径。目前我调用的sys_readlink /proc/self/fd/<fd>
有时可以正常工作,但我经常会收到错误-14(-EFAULT)。
这里有一些代码:
fs = get_fs();
set_fs(KERNEL_DS);
err = sys_readlink(path, buf, size-1);
set_fs(fs);
是否有替代(可能更好)的方法从内核获取realpath?
答案 0 :(得分:4)
从任务结构中的filep获取它,例如
之类的东西struct task_struct *task;
struct files_struct *files;
struct file *file;
char buf[buflen], *realpath;
task = current /* or some other task */;
get_task_struct(task);
files = get_files_struct(task);
put_task_struct(task);
spin_lock(&files->file_lock);
file = fcheck_files(files, fdno);
realpath = d_path(file->f_path, buf, buflen);
spin_unlock(&files->file_lock);
put_files_struct(files);
错误处理是为了简洁而省略的。
答案 1 :(得分:2)
-EFAULT意味着“buf”指针出错了。你先分配了内存吗?
编辑:看起来你正在以内核模式编程。事实证明,“真实路径”在内核模式中毫无意义。