C++ 在linux中如何在两个进程之间传递映射?
假设我有一个父进程C++ 在linux中如何在两个进程之间传递映射?,c++,inter-process-communicat,C++,Inter Process Communicat,假设我有一个父进程p1及其子进程p2p1创建p2并让p2做一些事情,然后将结果存储到std::map中。现在,p1想要访问地图 这是进程间通信,我想使用共享内存来实现。 我正在考虑两种解决办法 p2将映射转储到char数组并将其写入共享内存,然后p1读取共享内存以重构映射。映射的类型是,但我不确定如何将其转储到char数组 在p2中,假设指向共享内存的指针是void*shm,我可以用这种方式分配映射的内存std::map*result=(std::map*)shm,然后将元素插入result?在
p1
及其子进程p2
p1
创建p2
并让p
2做一些事情,然后将结果存储到std::map
中。现在,p1
想要访问地图
这是进程间通信,我想使用共享内存来实现。
我正在考虑两种解决办法
,但我不确定如何将其转储到char数组void*shm
,我可以用这种方式分配映射的内存std::map*result=(std::map*)shm
,然后将元素插入result
?在p1中,我可以做同样的事情std::map*result=(std::map*)shm
,然后迭代映射。但我不确定这是否正确不久前,我问了一个类似的问题: 我们没有在共享内存中使用std::map或boost::unordered_map,因为它不容易维护和调试。我们在boost共享内存(基本上是共享内存上的一个数组)中构建了自己的哈希表,它运行良好 在您的情况下,您可以将映射转储到内存,就像写入二进制文件一样。第二个进程从共享内存中读取它并重建映射 如果密钥不是很长,则可以将映射作为固定大小结构的数组转储到共享内存中,这非常容易写入和读取
您的第二种方法可能不起作用 您是否需要从p2到p1的一次性拷贝,或者是否需要持续共享数据?答案可能会告知您选择的解决方案。顺便说一句,在您的第一个备选方案中,您需要的是封送/取消封送。一种可能的方法是只打印到数组中,例如,
snprintf(shmbuffer,sizeof(shmbuffer),“%s%f\n”,StrVar,DbleVar)代码>更复杂的方法当然是可能的。我只需要一次拷贝,因为p2将在执行后退出。然后p1将创建另一个子进程p3并重复该进程。那么,我正在考虑第一种方法。第二种方法似乎不正确?