单独程序的多对一双向通讯

时间:2019-06-12 17:51:03

标签: c++ linux named-pipes

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

我的计划如下:一个与硬件对话的名为“驱动程序”的程序需要与Linux中未知数量的应用程序进行通信。 我读到,用于进程间通信的最常见方法之一是“命名管道”。

我尚未发现的问题是:新程序应如何通知驱动程序新程序正在运行,以便在新程序与驱动程序之间建立另一个连接(命名管道)?

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

enter image description here

2 个答案:

答案 0 :(得分:5)

实质上,您所描述的是程序之间的服务器/客户端关系;每个程序在通讯桥两侧的功能可能无关紧要。

即使这些问题在问题中似乎是打算在同一台计算机上进行的,但仍可以通过本地主机使用网络。

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

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

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

答案 1 :(得分:3)

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

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

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