【发布时间】: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