在不同进程之间传递文件描述符的便携方法

时间:2009-05-26 05:36:51

标签: unix fork share file-descriptor

在大多数UNIX系统上,通过fork()可以轻松地为子进程和父进程之间传递打开文件。但是我需要在“孩子已经分叉”后分享一个fd。

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

有没有人知道是否有一些库(以便携式方式)来做这件事?

3 个答案:

答案 0 :(得分:17)

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

这些日子非常便携;很多被认为是“不可移植”的东西(例如mmap!)现在非常普遍。如果你需要比“现在的大多数系统”更便携,你就会面临很多有趣的问题,但是如果你告诉我们更多关于你在做什么以及你正在做什么的平台(可能)也许是非Unix POSIX平台?)我们也许可以提供帮助。

答案 1 :(得分:12)

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

答案 2 :(得分:10)

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

您可以在Stevens(如Curt Sampson所述)以及Wikipedia中找到更多内容。

您可以在Sending file descriptor by Linux socket处找到有关工作代码的更新问题。