c++如何获取共享内存中的内容
时间: 2024-02-07 07:03:54 浏览: 139
在 C++ 中,可以使用共享内存来在进程之间共享数据。要获取共享内存中的内容,需要先将共享内存映射到进程的虚拟地址空间中,然后就可以直接访问共享内存中的内容了。
以下是一个简单的示例,演示如何使用 POSIX 共享内存 API 获取共享内存中的内容:
```c++
#include <iostream>
#include <cstring>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
using namespace std;
int main() {
const char* shm_name = "/my_shared_mem";
const int shm_size = 1024;
// 打开共享内存对象
int shm_fd = shm_open(shm_name, O_RDONLY, 0666);
if (shm_fd == -1) {
cerr << "Failed to open shared memory object" << endl;
return -1;
}
// 将共享内存映射到进程的虚拟地址空间中
void* shm_ptr = mmap(NULL, shm_size, PROT_READ, MAP_SHARED, shm_fd, 0);
if (shm_ptr == MAP_FAILED) {
cerr << "Failed to map shared memory to process address space" << endl;
return -1;
}
// 读取共享内存中的内容
char buffer[shm_size];
memcpy(buffer, shm_ptr, shm_size);
// 输出共享内存中的内容
cout << "Shared memory content: " << buffer << endl;
// 取消映射并关闭共享内存对象
munmap(shm_ptr, shm_size);
close(shm_fd);
return 0;
}
```
在这个示例中,我们首先打开了名为 `/my_shared_mem` 的共享内存对象,并将其映射到进程的虚拟地址空间中。然后,我们使用 `memcpy` 函数将共享内存中的内容复制到本地缓冲区中,并输出到控制台上。最后,我们取消了映射并关闭了共享内存对象。
阅读全文