我正在为新版本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 创建当前所拥有的新描述符就可以了。
答案 0 :(得分:1)
path_get听起来不错。查看此处http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/fs/pipe.c#L1046的示例,如果需要,您可以在那里找到更多参考号。