【发布时间】:2011-12-23 16:15:12
【问题描述】:
与使用sendmsg() 系统调用通过UNIX 域套接字发送它(类型设置为SCM_RIGHTS 的消息)相比,Linux 是否提供了一种更好的方法来将fd 从一个进程发送到另一个进程以进行共享?我想最好的可能性是能够以某种方式命名一个 fd,然后在一个不相关的过程中(按名称)打开它,但我对其他选择持开放态度。
我问这个问题的原因是能够在没有父子关系的进程之间使用 *fd() 函数(例如,eventfd()、timerfd()、signalfd() 等...) ,使得共享文件描述符变得更加困难。
【问题讨论】:
-
不,
sendmsg是传递文件描述符的方式。其实没那么难。 -
想象一下,我有一个服务器和许多客户端。我现在需要在服务器进程上有一个 UNIX 域套接字,我也需要在每个客户端进程上都一样。然后,在客户端启动时,在客户端上设置了这个 unix 域套接字并且连接被服务器接受后,我需要协调 fd 从服务器到客户端的传递,然后客户端才能继续其他加工。这比客户端使用名为 IPC 的 POSIX 打开对象要复杂得多。
-
嗯,与任何其他套接字编程没有太大区别。一个进程监听 unix 连接并发送你的事件 fd(s)(你不能真正传递信号 fds,计时器 - 也许,但我从未尝试过),每个客户端连接并获取事件 fd。将其包装成几个函数并完成它。
标签: linux linux-kernel system-calls