我有一个要复制的打开文件描述符,以便分别执行读取和查找操作。我看着
int dup(int old_fd)
系统调用。问题是它并不完全适合这里。手册页指出以下内容 http://man7.org/linux/man-pages/man2/dup.2.html:
成功返回后,旧文件描述符和新文件描述符 可以互换使用。他们指的是相同的 打开文件描述(请参见open(2)),从而共享文件 偏移量和文件状态标志;例如,如果文件偏移为 通过在文件描述符之一上使用lseek(2)进行修改, 偏移量也会随之改变。
是否可以复制文件描述符,使它们完全独立?
答案 0 :(得分:3)
否-至少不是在POSIX定义的机制中。
如果要完全独立于文件描述符,则需要避免共享的打开文件描述,这意味着一个独立的open()
或等效文件。
有一种特定于Linux的机制可以完成我从未听说过的工作。但是,浏览http://man7.org/linux/man-pages/man2/上对Linux的系统调用并没有启发。
答案 1 :(得分:3)
在Linux中,打开/proc/<pid>/fd/<n>
会打开当前在fd N 处打开的文件,但这是一个新副本,而不是像{{1} }和朋友。
这应该创建一个文件,其中包含dup()
,一堆零字节,然后是bar
。与使用foo
的版本进行对比。
dup()