如何在 linux 中的两个进程之间传递映射?

How to pass a map between two processes in linux?

假设我有一个父进程 p1 及其子进程 p2p1 创建 p2 并让 p2 做一些事情,然后将结果存储到 std::map 中。现在 p1 想要访问地图。

这是进程间通信,我想使用共享内存来实现。 我正在考虑两种解决方案。

  1. p2 将映射转储到一个字符数组并将其写入共享内存,然后 p1 读取共享内存以重建映射。地图的类型是 <std::string, double>,但我不确定如何将其转储到字符数组。

  2. 在p2中,假设指向共享内存的指针是void *shm,我可以这样分配map的内存std::map<std::string, double>* result = (std::map<std::string, double>*)shm,然后插入元素到result?在 p1 中,我可以做同样的事情 std::map<std::string, double>* result = (std::map<std::string, double>*)shm 然后迭代地图。但是不知道对不对

不久前我问过类似的问题:

我们没有在共享内存中使用std::map或boost::unordered_map,因为它不容易维护和调试。我们在 boost 共享内存(基本上是共享内存上的一个数组)中构建我们自己的散列 table,它工作正常。

在你的情况下,你可以像写入二进制文件一样将地图转储到内存中。第二个进程从共享内存中读取它并重建映射。

如果你的key不是很长,你可以将map转储为一个固定大小结构的数组到共享内存中,这样非常容易读写。

您的第二种方法可能行不通。