假設我有一個父親進程p1
及其子進程p2
。 p1
創建p2
並讓p
2執行某些操作,然後將結果存儲到std::map
中。現在p1
想要訪問地圖。如何在linux的兩個進程之間傳遞一個映射?
這是進程間通信,我想用共享內存來做到這一點。 我正在考慮兩種解決方案。
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
然後迭代地圖。但我不確定這是否正確。
您是否需要從p2到p1的一次性副本,還是需要共享數據 - 答案可能會通知您選擇的解決方案。 –
順便說一句,在你的第一個選擇中,你正在尋找的是所謂的編組/取消編組。一種可能的方法是隻打印到數組中,例如'snprintf(shmbuffer,sizeof(shmbuffer),「%s%f \ n」,StrVar,DbleVar);'更復雜/更復雜的方法當然是可能的。 –
我只需要一次拷貝,因爲p2會在執行後退出。然後,p1將創建另一個子進程p3並重復該過程。 –