c++如何创建进程共享内存
时间: 2023-09-13 18:08:28 浏览: 194
进程之间共享内存
在C++中创建进程共享内存可以使用Windows API提供的函数。以下是一个示例代码,用于创建一个共享内存区域并将其映射到多个进程中:
```cpp
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
HANDLE hMapFile;
LPCTSTR pBuf;
// 创建共享内存
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // 使用无效句柄值创建文件映射
NULL, // 安全属性为默认值
PAGE_READWRITE, // 内存页面读写权限
0, // 高位文件大小(如果为0,则基于文件大小创建映射)
1024, // 低位文件大小(创建映射的大小)
TEXT("SharedMemory")); // 共享内存名称
if (hMapFile == NULL) {
cout << "Could not create file mapping object: " << GetLastError() << endl;
return 1;
}
// 将共享内存映射到进程地址空间
pBuf = (LPTSTR)MapViewOfFile(hMapFile,
FILE_MAP_ALL_ACCESS, // 映射的访问权限
0,
0,
1024);
if (pBuf == NULL) {
cout << "Could not map view of file: " << GetLastError() << endl;
CloseHandle(hMapFile);
return 1;
}
// 将数据写入共享内存
CopyMemory((PVOID)pBuf, "Hello from process 1!", sizeof("Hello from process 1!"));
// 等待用户输入,以便查看共享内存中的数据
cout << "Press Enter to continue..." << endl;
getchar();
// 清理
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
return 0;
}
```
在此示例中,我们创建了一个大小为1024字节的共享内存区域,并将其映射到当前进程的地址空间。然后,我们将一些数据写入共享内存,并等待用户输入以便查看共享内存中的数据。
为了在另一个进程中访问共享内存,您可以使用相同的共享内存名称来打开同一共享内存对象,并将其映射到该进程的地址空间中。然后,您可以从该进程中读取或写入共享内存中的数据。
阅读全文