Как скопировать структурный файл? - PullRequest
9 голосов
/ 17 августа 2010

Я портирую старый код ядра Linux для более новой версии 2.6.32.

Есть часть, которая копирует дескриптор файла.Идея заключалась в том, чтобы выделить новый файловый дескриптор и новый struct file и использовать их с другим f_op и оставить все остальные поля struct file эквивалентными оригинальным.

Как мне это сделать в современном ядре?Я написал приблизительную реализацию, но я не знаю, должен ли я вызывать file_get, path_get или использовать другие приращения счетчика.

struct file * copy_file(const struct file * iOrig, int * oNewFd) {
  if (!orig)
    return 0; 
  *oNewFd = get_unused_fd();
  if (*oNewFd < 0)
    return 0;
  struct file * rv = alloc_file(orig->f_path.mnt, orig->f_path.dentry, orig->f_path.mode, orig->f_op);
  if (!rv)
    goto free_fd;
  fd_install(fd, rv);
  return rv;
free_fd:
  put_unused_fd(*oNewFd)
  return 0;
}

PS На самом деле копирование всех файлов исходного файла не является необходимым.Мне просто нужно разрешить новый набор файловых операций в пользовательском пространстве.Таким образом, создание нового дескриптора, принадлежащего current с данным f_op , подойдет.

1 Ответ

1 голос
/ 26 августа 2010

path_get звучит нормально.Посмотрите пример здесь http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/fs/pipe.c#L1046, и вы сможете найти больше ссылок там, если они вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...