我目前正在使用 C 和 C++ 中的共享内存开发模块化框架。 目标是在 C 和 C++ 中都有独立的程序,通过共享内存相互通信。
例如一个程序负责读取 GPS,另一个程序负责处理来自多个传感器的数据。
一个主程序会启动所有的从程序
(目前我正在使用 fp = popen(./slave1/slave1,"r");
来执行此操作)然后创建每个从属设备都可以连接的共享内存段。
这背后的想法是,如果一个 slave 死了,它可以被 master 复活并重新连接到同一个共享内存段。
也可以在运行时交换从站(例如,将一个 GPS 换成另一个)。
问题是我通过 popen 生成从站,并将共享内存 ID 传递给从站。从站通过管道传回所需的大小。 完成此操作后,我想将从站的管道重新路由到终端以显示调试消息而不通过主站。
非常感谢您的建议以及该问题的其他解决方案。 关键是在设置共享内存之前进行某种形式的通信。
最佳答案
我建议使用另一种方式进行交流。命名管道是我认为的方式。重新路由标准输出/错误充其量是棘手的。
我建议使用 boost.interprocess 来处理 IPC。并注意同步:)
我的2c
关于c++ - 从 C++ 启动程序,与管道交换信息,然后共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4923956/