如何在 linux 中的两个进程之间传递映射?
How to pass a map between two processes in linux?
假设我有一个父进程 p1
及其子进程 p2
。 p1
创建 p2
并让 p
2 做一些事情,然后将结果存储到 std::map
中。现在 p1
想要访问地图。
这是进程间通信,我想使用共享内存来实现。
我正在考虑两种解决方案。
p2 将映射转储到一个字符数组并将其写入共享内存,然后 p1 读取共享内存以重建映射。地图的类型是 <std::string, double>
,但我不确定如何将其转储到字符数组。
在p2中,假设指向共享内存的指针是void *shm
,我可以这样分配map的内存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,因为它不容易维护和调试。我们在 boost 共享内存(基本上是共享内存上的一个数组)中构建我们自己的散列 table,它工作正常。
在你的情况下,你可以像写入二进制文件一样将地图转储到内存中。第二个进程从共享内存中读取它并重建映射。
如果你的key不是很长,你可以将map转储为一个固定大小结构的数组到共享内存中,这样非常容易读写。
您的第二种方法可能行不通。
假设我有一个父进程 p1
及其子进程 p2
。 p1
创建 p2
并让 p
2 做一些事情,然后将结果存储到 std::map
中。现在 p1
想要访问地图。
这是进程间通信,我想使用共享内存来实现。 我正在考虑两种解决方案。
p2 将映射转储到一个字符数组并将其写入共享内存,然后 p1 读取共享内存以重建映射。地图的类型是
<std::string, double>
,但我不确定如何将其转储到字符数组。在p2中,假设指向共享内存的指针是
void *shm
,我可以这样分配map的内存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,因为它不容易维护和调试。我们在 boost 共享内存(基本上是共享内存上的一个数组)中构建我们自己的散列 table,它工作正常。
在你的情况下,你可以像写入二进制文件一样将地图转储到内存中。第二个进程从共享内存中读取它并重建映射。
如果你的key不是很长,你可以将map转储为一个固定大小结构的数组到共享内存中,这样非常容易读写。
您的第二种方法可能行不通。