独立程序的多对一双向通信
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]_out
和 channel_[id]_in
.
我正在尝试在 Linux 中的程序之间进行双向多对一通信。
我的计划如下:一个名为 "driver" 的与硬件通信的程序需要与 Linux 中未知数量的应用程序通信。 我读到进程间通信最常见的方式之一是 "named pipes"。
我还没有发现的问题是:新程序应该如何通知驱动程序有新程序运行,以便在新程序和驱动程序之间建立更多的连接(命名管道)?
所有程序都将用 C++ 编写
本质上,您所描述的是程序之间的 server/client 关系;每个程序在通信桥的两边做什么可能是无关紧要的。
即使从问题中可以看出这些进程应该在同一台机器上,您仍然可以通过本地主机联网。
如果您不喜欢管道,为什么不为每个程序(客户端)已知的驱动程序(服务器)使用一个端口,服务器侦听该端口?
我相信这几乎就是 X-Windows 的基本理念。
另外,应该有很多可靠的代码可以帮助您入门。
我也认为套接字可能是更好的解决方案,但如果您真的想要命名管道,我会这样做:
服务器打开一个名为 channel_request
的管道进行读取。任何新客户端打开它进行写入并写入一个唯一的 ID。 (PID 应该工作)。服务器读取这个 id 并创建一个名为 channel_[id]
的命名管道。客户端然后打开 channel_[id]
进行读取并可以开始接收数据。
请注意 linux 管道是单向的,因此如果您想要 two-way 通信如图所示,您需要同时打开 channel_[id]_out
和 channel_[id]_in
.