跳至主要内容

20.共享内存的申请与释放

共享内存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <errhandlingapi.h>
#include <handleapi.h>
#include <memoryapi.h>
#include <minwindef.h>
#include <winnt.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>

#define MapFileName "共享内存"
#define BUF_SIZE 0X1000
HANDLE g_hMapFile;
LPTSTR g_lpBuff;

int main(int argc, char *argv[]) {
getchar();
//内核对象:物理页
g_hMapFile = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, MapFileName);
//将物理页与线性地址进行映射
g_lpBuff = (LPTSTR)MapViewOfFile(g_hMapFile, FILE_MAP_WRITE,0, 0, BUF_SIZE);

*(PDWORD)g_lpBuff = 0x12345678;
printf("%p",g_lpBuff);
getchar();
//关闭映射
UnmapViewOfFile(g_lpBuff);
//关闭句柄
CloseHandle(g_hMapFile);
getchar();
return 0;
}

关于本文

由 GuQing 撰写,采用 CC BY-NC 4.0 许可协议。