boost 进程间通信-share memery传递字符串
写入字符 writeShareMemery.cpp
#include<boost/interprocess/shared_memory_object.hpp>
#include<boost/interprocess/mapped_region.hpp>
#include <iostream>
#include <vector>
using namespace boost::interprocess;
int main ()
{
try{
char *msg = "6F2C61200071008A28F1752C666324D6EB3FEA05867852F68140FE3E51EC6D54C50954E52146200096A072209DF3D4B8635B00C28A4EC142A37C5A7B1162B6709CF1F854FE3C4D7732C3D326A6F4B0E09D65206C2B7DC0F5FC12A9B9C6721550F5C0EDBB9F463E4A248E9870EEE48928E7ED9136C3CB60575F5D52B00FB3EF97FCF076A3AB7D8B73AE58DB14CDEAE21C39BF46AD0B10EDF7ECFCEA80EF76359027209ED585792F245AB7A3CC25A9D95A10788D0FA28F9CFA451B9FA33432E225EB283842B3309D4D663DABD047CDD11C96AC0DB5A1DDC2A23AAD3E57128869B4EE34840245645DDC1F12110D67F2E53B407D585284EBA20668F9E557A4286F589CD7648B5F4A65CA60EBB35C810BE66C07160A29C49963F55F107D29B3F3EE5E1FCE2D939BF7444758113FCCE8BE2E4F03E2688132B2486F471DDE57B55E1102A631B5D6989FD7802D64BCCE06BEDD59A6CD652D59C512F21AA0E2C8983B49DB3DFB4875D03502EF1FA53231957E306B5E7080F35F0097A965919C0979F04C9DBAA8A76D2C2B4ADBF5FAC2FFBB8DD4739C6D1555AD622C0F472B149CC411C0BC767A6C85F9A9A22DB13D33AD19F40B9EA2C1488B0D59B319917336D30AB9F62E06B327E37822A8DB00AEBD6D6ED39742B695176CC518968F5FC05F172DC84CE8B4391D1FA2502FBB72B96FE0099B7EDC";
std::cout<<"msg.size "<<strlen(msg)<<std::endl;
boost::interprocess::shared_memory_object shdmem(boost::interprocess::open_or_create,"share_memery", boost::interprocess::read_write);
shdmem.truncate(strlen(msg));
boost::interprocess::mapped_region region(shdmem, boost::interprocess::read_write);
char *msg1=static_cast<char *>(region.get_address());
//写入共享内存
strcpy(msg1,msg);
getchar();
shdmem.remove(shdmem.get_name());
return 0;
}
catch(interprocess_exception &ex){
std::cout << ex.what() << std::endl;
return 1;
}
return 0;
}
读取字符 readShareMemery.cpp
#include<boost/interprocess/shared_memory_object.hpp>
#include<boost/interprocess/mapped_region.hpp>
#include <iostream>
#include <vector>
using namespace boost::interprocess;
int main ()
{
try{
boost::interprocess::shared_memory_object shdmem(boost::interprocess::open_only,"share_memery",boost::interprocess::read_only);
boost::interprocess::mapped_region region(shdmem, boost::interprocess::read_only);
//读取共享内存
char *msg1 = static_cast<char *>(region.get_address());
std::cout<<"msg is : "<<msg1<<std::endl;
return 0;
}
catch(interprocess_exception &ex){
std::cout << ex.what() << std::endl;
return 1;
}
return 0;
}
编译
g++ writeShareMemery.cpp -o writeShareMemery -I/appstore/3rd_party/cpp/3rd_party/boost-1_66/include /appstore/3rd_party/cpp/3rd_party/boost-1_66/lib/gcc_x86_64/libboost_thread.a /appstore/3rd_party/cpp/3rd_party/boost-1_66/lib/gcc_x86_64/libboost_system.a -lpthread -ldl -lrt