如何复制struct文件?

时间:2010-08-17 11:05:53

标签: linux-kernel

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

有一个部分复制文件描述符。我们的想法是分配一个新的文件描述符和一个新的结构文件,并将它们与另一个 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;
}

P.S。事实上,复制原始文件的所有文件都不是必需的。我只需要在用户空间中允许一组新的文件操作。因此,使用给定的 f_op 创建当前所拥有的新描述符就可以了。

1 个答案:

答案 0 :(得分:1)

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