繁体   English   中英

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

[英]How to pass a map between two processes in linux?

假设我有一个父进程p1及其子进程p2 p1创建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然后迭代地图。 但我不确定这是否正确。

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

使用std :: string键增强共享内存中的无序映射

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM