C++创建一个共享内存,客户端往里面写,服务端一直不断读取
时间: 2024-10-24 07:07:04 浏览: 13
在C++中,你可以使用`boost::interprocess`库来创建共享内存区域,这个库提供了一种跨进程通信的方式。以下是一个简单的示例,展示了如何创建共享内存、客户端写入数据和服务端读取数据:
首先,你需要包含必要的头文件并设置好共享内存资源:
```cpp
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <cstring> // 使用memset填充内存
// 定义共享内存的大小
const std::size_t SHARED_MEMORY_SIZE = 1024; // 例如1KB
// 共享内存名称
std::string sharedMemName = "MySharedMemory";
```
**创建共享内存(服务端):**
```cpp
// 创建一个唯一的标志符
int shmKey = 12345;
boost::interprocess::shared_memory_object shmem(
boost::interprocess::create_only,
sharedMemName.c_str(), // 名称
shmKey, // 标志符
boost::interprocess::read_write); // 权限:读写
try {
// 如果共享内存已存在,则改为打开模式
if (shmem.get_id() == boost::interprocess::invalid_shm_key) {
shmem = boost::interprocess::open_only(shmemName.c_str());
}
// 创建映射区域
boost::interprocess::mapped_region region(shmem, boost::interprocess::read_write);
char* data = static_cast<char*>(region.get_address());
memset(data, 0, SHARED_MEMORY_SIZE); // 初始化为0
// ... 服务端在这里持续读取数据
} catch (const boost::interprocess::interprocess_exception& e) {
std::cerr << "Error creating or opening shared memory: " << e.what() << std::endl;
}
```
**向共享内存写入(客户端):**
```cpp
try {
shmem = boost::interprocess::open_or_create(sharedMemName.c_str(), shmKey, SHARED_MEMORY_SIZE);
boost::interprocess::mapped_region region(shmem, boost::interprocess::read_write);
char* data = static_cast<char*>(region.get_address());
// ... 在这里写入数据,例如
std::strcpy(data, "Hello from client!"); // 或其他字符串
} catch (const boost::interprocess::interprocess_exception& e) {
std::cerr << "Error writing to shared memory: " << e.what() << std::endl;
}
```
**服务端读取(持续循环):**
```cpp
while (true) {
if (*data != '\0') { // 数据未结束
std::cout << "Read: " << data << std::endl;
data++; // 移动指针到下一个字符
} else {
break; // 数据已读完
}
}
```
阅读全文