我正在尝试在Linux中的程序之间进行双向多对一通信。
我的计划如下:一个与硬件对话的名为“驱动程序”的程序需要与Linux中未知数量的应用程序进行通信。 我读到,用于进程间通信的最常见方法之一是“命名管道”。
我尚未发现的问题是:新程序应如何通知驱动程序新程序正在运行,以便在新程序与驱动程序之间建立另一个连接(命名管道)?
所有程序都将用C ++编写
答案 0 :(得分:5)
实质上,您所描述的是程序之间的服务器/客户端关系;每个程序在通讯桥两侧的功能可能无关紧要。
即使这些问题在问题中似乎是打算在同一台计算机上进行的,但仍可以通过本地主机使用网络。
如果您不希望使用管道,为什么不使用服务器侦听的每个程序(客户端)已知的驱动程序(服务器)端口?
我相信,这几乎就是X-Windows的基本原理。
此外,应该有很多可靠的代码可以帮助您入门。
答案 1 :(得分:3)
我也认为套接字可能是一个更好的解决方案,但是如果您真的想要命名管道,我可以这样做:
服务器打开一个名为channel_request
的管道进行读取。任何新客户端都将其打开以进行写入并写入唯一的ID。 (PID应该起作用)。服务器读取该ID并创建一个名为channel_[id]
的命名管道。然后,客户端打开channel_[id]
进行读取,并可以开始接收数据。
请注意,Linux管道是单向的,因此,如果您想要如图所示的双向通信,则需要同时打开channel_[id]_out
和channel_[id]_in
。