本篇介紹使用 boost C++ 的 interprocess 模組來做IPC行程通訊,內容包含了 boost::interprocess::managed_shared_memory 的用法。
安裝 boost
還沒安裝 boost 的話請參考 windows 安裝方式 / ubuntu 安裝方式。
使用範例
1 | // g++ boost-interprocess-shared-memory.cpp -o a.out -pthread -lrt |
編譯
linux
在 linux 下用 g++ 編譯需要連結 pthread 與 rt。1
$ g++ boost-interprocess-shared-memory.cpp -o a.out -pthread -lrt
連結 pthread 是因為 boost 內部實作時使用到了 pthread_mutexattr_init、pthread_mutexattr_setpshared、pthread_mutexattr_settype、pthread_mutexattr_destroy 等函式。
連結 rt 是因為 boost 內部實作時使用到了 shm_open、shm_unlink 等函式。
Boost.Interprocess 不用編譯,它是 header only library,只要將你的 Boost header 的目錄加入編譯器的 include path 即可。
Boost.Interprocess 是依賴於 Boost.DateTime
windows
在 windows 下用 visual studio 編譯不連結 DateTime 的函式庫的話記得加 BOOST_DATE_TIME_NO_LIB,要加在 boost/interprocess/*.hpp 前才有意義。1
2#define BOOST_DATE_TIME_NO_LIB
#include <boost/interprocess/managed_shared_memory.hpp>
參考
Chapter 33. Boost.Interprocess - Managed Shared Memory
https://theboostcpplibraries.com/boost.interprocess-managed-shared-memory
boost::interprocess 共享内存 - 作业部落 Cmd Markdown 编辑阅读器
https://www.zybuluo.com/Pigmon/note/1376783
Chapter 17. Boost.Interprocess - 1.66.0
https://www.boost.org/doc/libs/1_66_0/doc/html/interprocess.html
c++ - Is boost::managed_shared_memory using a file on my hard drive? - Stack Overflow
https://stackoverflow.com/questions/58487479/is-boostmanaged-shared-memory-using-a-file-on-my-hard-drive
Highscore - Boost C++ 库 - 进程间通讯
http://zh.highscore.de/cpp/boost/interprocesscommunication.html
Boost IPC共享内存的使用总结 - lday的个人页面 - OSCHINA
https://my.oschina.net/lday/blog/724458
Boost.Interprocess使用手册翻译之二:快速指南 (Quick Guide for the Impatient)_great3779的专栏-CSDN博客
https://blog.csdn.net/great3779/article/details/7222202