c++ - 从 C++ 启动程序,与管道交换信息,然后共享内存

标签 c++ pipe shared-memory popen

我目前正在使用 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/

相关文章:

c++ - 使用 QPainter 绘制的 QML 类型

dll - 在多个进程中加载​​相同的 dll 实例

C++ 继承和访问 protected 基类成员 : is doing it Java-style a bad idea?

c++ - 如何通过 at() 函数访问二维 vector 的索引?

C++:在两个程序中使用宽字符串时无法通过管道获取数据

c - 为什么没有关于管道的维基百科?

python - python中进程间传递数据

python - 在 GIL 之外使用 scipy 例程

c - 尝试在客户端-服务器程序中的进程之间创建共享内存段

c++ - 关于默认可构造性的差异