可移植的方式在不同的进程之间传递文件描述符

在大多数UNIX系统上,在进程之间传递一个打开的文件可以通过fork()方便地完成子/父进程。 但是我需要在孩子已经分叉之后分享一个fd。

我发现一些网页告诉我,sendmsg()可能适用于任意进程; 但这似乎非常依赖于操作系统和复杂。 portlisten似乎是我能find的最好的例子,但我更喜欢像libevent这样的好包装库,它隐藏了kqueue,pool,…的所有魔力。

有谁知道是否有一些图书馆(和便携式的方式)来做到这一点?

最好的办法是尝试通过Unix域套接字发送文件描述符。 这在斯蒂芬斯(Stephens)和网络上的一些地方都有描述,但如果你问得好,我可以为你挖掘代码。

这些日子将会非常轻便。 很多事情被认为是“不可移植的”,为什么现在回到什么时候(比如mmap !)是非常普遍的。 如果你现在需要比“大多数系统”更具可移植性,那么你就有很多有趣的问题,但是如果你告诉我们更多关于你在做什么以及你在做什么平台也许是非Unix的POSIX平台?)我们可能会有所帮助。

我发现(从另一个问题)一个好的图书馆: libancillary 。 这只是我需要的!

有一个Unix域基于套接字的机制,用于在进程之间传输文件描述符(当然,不能被内存映射的套接字) – 使用sendmsg()系统调用。

你可以在Stevens (如Curt Sampson所提到的)以及维基百科中找到更多。

您可以通过Linux套接字发送文件描述符,找到更多近期的问题。