/**
* @brief c++采用boost库实现共享内存,可通过共享内存进行多进程之间的通信
*
* @param pert
* @param 2023年11月7日12:39:00
*/
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <iostream>
using namespace boost::interprocess;
int main1()
{
try
{
// 创建共享内存对象
shared_memory_object shm(create_only, "MySharedMemory", read_write);//通过create_only构造函数和指定的名称创建了一个共享内存对象MySharedMemory。
// 设置共享内存大小
shm.truncate(1024);
{//其他进程中读取共享内存:
shared_memory_object shm(open_only, "MySharedMemory", read_write);
// 映射共享内存到当前进程的地址空间
mapped_region region(shm, read_write);
}
// 映射共享内存到当前进程的地址空间
mapped_region region(shm, read_write);//使用mapped_region类将共享内存映射到当前进程的地址空间中,获取映射区域的起始地址。
// 获取映射区域的起始地址
void* addr = region.get_address();
// 在共享内存中写入数据
std::strcpy(static_cast<char*>(addr), "Hello, Boost Interprocess!");//使用strcpy函数将字符串"Hello, Boost Interprocess!"写入共享内存的起始地址。
// 读取共享内存中的数据
char buffer[1024];
std::strcpy(buffer, static_cast<const char*>(addr));//使用strcpy函数将共享内存中的数据复制到buffer数组中。
//注意,由于共享内存中存储的是原始的内存块,所以我们需要进行类型转换。
// 打印读取到的数据
std::cout << "Data read from shared memory: " << buffer << std::endl;
// 删除共享内存对象
shared_memory_object::remove("MySharedMemory");
}
catch (const std::exception& ex)
{
std::cerr << "Exception: " << ex.what() << std::endl;
shared_memory_object::remove("MySharedMemory");
return 1;
}
return 0;
}
c++采用boost库实现共享内存,可通过共享内存进行多进程之间的通信
最新推荐文章于 2024-11-11 21:48:36 发布