如何复制struct文件?

Bas*_*evs 9 linux-kernel

我正在为新版本2.6.32移植旧的Linux内核代码.

有一个部分复制文件描述符.我们的想法是分配一个新的文件描述符和一个新的struct文件,并将它们与另一个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;
}
Run Code Online (Sandbox Code Playgroud)

PS事实上,复制原始文件的所有文件都不是必需的.我只需要在用户空间中允许一组新的文件操作.因此,使用给定的f_op创建一个由current拥有的新描述符.

ZXX*_*ZXX 1

path_get 听起来不错。请查看此处的示例http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/fs/pipe.c#L1046,如果需要,您将能够在那里找到更多参考资料。