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
想要访问地图

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

  • p2将映射转储到char数组并将其写入共享内存,然后p1读取共享内存以重构映射。映射的类型是
    ,但我不确定如何将其转储到char数组

  • 在p2中,假设指向共享内存的指针是
    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并重复该进程。那么,我正在考虑第一种方法。第二种方法似乎不正确?