【问题标题】:How to copy struct file?如何复制结构文件?
【发布时间】:2010-08-17 11:05:53
【问题描述】:

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

有一个复制文件描述符的部分。这个想法是分配一个新的文件描述符和一个新的 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;
}

附:事实上,没有必要复制原始文件的所有文件。我只需要在用户空间允许一组新的文件操作。因此,使用给定的 f_op 创建一个由 current 拥有的新描述符就可以了。

【问题讨论】:

  • 有点不清楚你的目标是什么。你想要一个指向同一个文件的新文件描述符,还是一个具有不同路径的文件副本?
  • 我想要一个指向同一个文件但具有不同文件操作集(关闭、ioctl)的文件描述符。
  • 实际上任何有关文件结构分配的信息都可能有所帮助。

标签: linux-kernel


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多