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

Unix 在不同进程之间传递文件描述符的可移植方法,unix,fork,share,file-descriptor,Unix,Fork,Share,File Descriptor,在大多数UNIX系统上,通过fork()可以轻松地为子/父进程在进程之间传递打开的文件;然而,我需要分享一个fd“在”孩子已经被叉了 我发现有人告诉我sendmsg()可能适用于任意过程;但这似乎非常依赖操作系统,而且非常复杂。这似乎是我能找到的最好的例子,但我更喜欢像libevent这样的好包装器库,它隐藏了kqueue、pool等的所有魔力 有人知道是否有某种库(和可移植的方法)可以做到这一点吗?您最好尝试通过Unix域套接字发送文件描述符。这在Stephens和web上的一些地方都有描述,

在大多数UNIX系统上,通过fork()可以轻松地为子/父进程在进程之间传递打开的文件;然而,我需要分享一个fd“在”孩子已经被叉了

我发现有人告诉我sendmsg()可能适用于任意过程;但这似乎非常依赖操作系统,而且非常复杂。这似乎是我能找到的最好的例子,但我更喜欢像libevent这样的好包装器库,它隐藏了kqueue、pool等的所有魔力


有人知道是否有某种库(和可移植的方法)可以做到这一点吗?

您最好尝试通过Unix域套接字发送文件描述符。这在Stephens和web上的一些地方都有描述,但是如果你问得好的话,我可以为你挖掘代码


这将是相当便携式这些天;很多以前被认为是“不可移植”的东西(比如
mmap
!)现在非常普遍。如果您需要比“现在的大多数系统”更具可移植性,那么您将面临许多有趣的问题,但如果您能告诉我们更多关于您正在做什么以及您正在使用什么平台(可能是非Unix POSIX平台?)的信息,则可能会出现这种情况我们或许可以提供帮助。

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

您可以在中找到更多信息(如Curt Sampson所述),也可以在


您可以在上找到一个关于工作代码的问题。

在使用sendmsg()时,我仍然有一个问题。我认为将域套接字作为第一个参数就足够了,但似乎我仍然必须将msghdr.msg_名称填充为域套接字的sockaddr_un-为什么?是否仍要阻止它?搜索“文件描述符传递”