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

时间:2015-05-28 23:19:07

标签: c++ inter-process-communicat

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

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

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

  2. 在p2中,假设指向共享内存的指针为void *shm,我可以使用这种方式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,然后迭代地图。但我不确定这是否正确。

1 个答案:

答案 0 :(得分:2)

不久前我问了一个类似的问题:

boost unordered map in shared memory using std::string key

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

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

如果您的密钥不是很长,您可以将映射作为固定大小结构的数组转储到共享内存中,这非常容易编写和读取。

您的第二种方法可能无效。