簡體   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