26

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

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

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

4

2 回答 2

18

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

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

于 2009-05-26T06:13:30.843 回答
13

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

您可以在Stevens(如 Curt Sampson 提到的)以及Wikipedia中找到更多信息。

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

于 2009-05-26T06:20:22.593 回答