独立程序的多对一双向通信

Many-to-one two-way communication of separate programs

我正在尝试在 Linux 中的程序之间进行双向多对一通信。

我的计划如下:一个名为 "driver" 的与硬件通信的程序需要与 Linux 中未知数量的应用程序通信。 我读到进程间通信最常见的方式之一是 "named pipes"。

我还没有发现的问题是:新程序应该如何通知驱动程序有新程序运行,以便在新程序和驱动程序之间建立更多的连接(命名管道)?

所有程序都将用 C++ 编写

本质上,您所描述的是程序之间的 server/client 关系;每个程序在通信桥的两边做什么可能是无关紧要的。

即使从问题中可以看出这些进程应该在同一台机器上,您仍然可以通过本地主机联网。

如果您不喜欢管道,为什么不为每个程序(客户端)已知的驱动程序(服务器)使用一个端口,服务器侦听该端口?

我相信这几乎就是 X-Windows 的基本理念。

另外,应该有很多可靠的代码可以帮助您入门。

我也认为套接字可能是更好的解决方案,但如果您真的想要命名管道,我会这样做:

服务器打开一个名为 channel_request 的管道进行读取。任何新客户端打开它进行写入并写入一个唯一的 ID。 (PID 应该工作)。服务器读取这个 id 并创建一个名为 channel_[id] 的命名管道。客户端然后打开 channel_[id] 进行读取并可以开始接收数据。

请注意 linux 管道是单向的,因此如果您想要 two-way 通信如图所示,您需要同时打开 channel_[id]_outchannel_[id]_in.