【发布时间】:2013-04-04 11:02:50
【问题描述】:
我拥有的是进程 ID 和来自该进程的文件描述符。除了 sendmsg 之外,还有什么方法可以复制(或重新打开)该进程的文件描述符以供 Linux 中的另一个进程使用?
Windows 有 DuplicateHandle 用于此目的,我想知道 Linux 上是否有类似的东西。
【问题讨论】:
-
简短而唯一的答案是:不。原因是文件描述符只是表的索引,并且由于每个表对于每个进程都是唯一的,因此您不能简单地使用来自一个进程的描述符另一个。
-
我已经更新了我的问题。我想在另一个进程中重新打开文件描述符。类似于here 所描述的内容,但没有 sendmsg
-
答案仍然是否定的。如果你想在另一个进程中复制一个句柄,你可以使用
sendmsg方法。其他进程不能自己打开同一个文件而不是尝试从第一个进程获取描述符吗? -
文件可以被取消链接或替换,因此按名称打开“相同”文件并不能保证它会被打开,或者它会打开同一个文件,据我所知,事情在 linux 中是如何工作的
-
从另一个进程复制任意文件描述符的能力感觉像是一个小的安全问题。在 Windows 中可以做到这一点并不奇怪。 (请注意“小”字上滴滴的讽刺)