【问题标题】:Is there an easier way to share file descriptors between unrelated processes on modern day Linux (i.e., ver>=3.0.0)?有没有一种更简单的方法可以在现代 Linux 上的不相关进程之间共享文件描述符(即 ver>=3.0.0)?
【发布时间】: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


【解决方案1】:

https://www.normalesup.org/~george/comp/libancillary/ 有一个库可以为您执行此操作,该库通过复制到它们的树中用于许多项目,但主要 git 主机不再存在。

【讨论】:

    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 2018-06-06
    • 2015-09-30
    • 1970-01-01
    • 2012-12-03
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多