sys readlink терпит неудачу EFAULT-альтернатива
У меня есть 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);
Есть ли альтернативный (возможно, лучший) способ получить реальный путь от ядра?
2 ответа:
Получить его из файла в структуре задачи, например, что-то вроде
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);
Обработка ошибок elided для краткости.