我有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?
发布于 2011-11-22 07:58:59
从任务结构中的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);为简洁起见,省略了错误处理。
发布于 2011-11-22 02:51:48
-EFAULT表示"buf“指针有问题。你是先分配内存的吗?
编辑:看起来你是在内核模式下编程。事实证明“真实的”路径在内核模式下是没有意义的。
https://stackoverflow.com/questions/8216871
复制相似问题