[英]How to pass a map between two processes in linux?
假设我有一个父进程p1
及其子进程p2
。 p1
创建p2
并让p
2做一些事情,然后将结果存储到std::map
。 现在, p1
要访问地图。
这是进程间通信,我想使用共享内存来做到这一点。 我正在考虑两种解决方案。
p2将映射转储到char数组,并将其写入共享内存,然后p1读取共享内存以重建映射。 映射的类型是<std::string, double>
,但是我不确定如何将其转储到char数组。
在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 :: map或boost :: unordered_map,因为它不容易维护和调试。 我们在增强型共享内存(基本上是共享内存中的数组)中构建自己的哈希表,并且工作正常。
在这种情况下,您可以将映射转储到内存中,就像写入二进制文件一样。 第二个过程从共享内存中读取它并重建映射。
如果密钥不是很长,则可以将地图作为固定大小结构的数组转储到共享内存中,这非常容易读写。
您的第二种方法可能行不通。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.