我目前正在使用 C 和 C++ 中的共享内存开发模块化框架。
目标是在 C 和 C++ 中拥有独立的程序,通过共享内存相互交谈。
例如。一个程序负责读取 GPS,另一个程序负责处理来自多个传感器的数据。
一个主程序将启动所有从程序
(目前我正在使用 fp = popen(./slave1/slave1,"r");
来执行此操作)然后创建每个从站可以连接的共享内存段。
这背后的想法是,如果一个 slave 死了,它可以被 master 恢复并重新连接到同一个共享内存段。
从站也可以在运行期间交换(例如,将一个 GPS 与另一个切换)。
问题是我通过 popen 生成了从站,并将共享内存 ID 传递给从站。从设备通过管道传回所需的大小。
完成此操作后,我想将从站的管道重新路由到终端以显示调试消息而不是通过主站。
非常感谢建议以及该问题的其他解决方案。
关键是在设置共享内存之前进行某种形式的通信。
最佳答案
管道不可重新路由——它们在创建时就去到它们去的地方。您需要做的是让从属设备在完成管道后关闭管道,然后在其他地方重新打开其标准输出。如果你总是希望输出到终端,你可以使用 freopen("/dev/tty", "w", stdout)
,但它总是会转到终端——你不能将它重定向到其他任何地方。
关于c++ - 从 C++ 启动程序,用管道交换信息,然后共享内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4923956/