#include <stdio.h>
#include <Windows.h>
#define SHAREMEMNAME "ZSShareMem"
int main()
{
DWORD err;
HANDLE hShareMem = INVALID_HANDLE_VALUE;
char *address;
int *p;
hShareMem = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,SHAREMEMNAME); //创建共享内存
if (hShareMem == INVALID_HANDLE_VALUE || hShareMem == NULL) //判断是否出错
{
printf("共享内存创建失败\n");
return 0;
}
address = (char *)MapViewOfFile(hShareMem,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); //将共享内存映射到当前进程地址空间
memset(address,0,1024);
sprintf(address,"1");
printf("%s\n",address);
p = (int *)MapViewOfFile(hShareMem,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
*p = 247;
printf("%d\n",p[0]);
p[1] = 36;
printf("%d\n",p[1]);
getchar();
return 0;
}
MapViewOfFile函数
功能:将一个文件映射对象映射到当前应用程序的地址空间
原型:
LPVOID WINAPI MapViewOfFile(
__in HANDLE hFileMappingObject, //文件映射对象的句柄
__in DWORD dwDesiredAccess, //访问方式
__in DWORD dwFileOffsetHigh, //文件中映射起点的高32位地址
__in DWORD dwFileOffsetLow, //文件中映射起点的低32位地址
__in SIZE_T dwNumberOfBytesToMap //文件中要映射的字节数
);
访问方式的取值:
FILE_MAP_WRITE映射可读可写。文件映射对象必须通过PAGE_READWRITE访问创建。
FILE_MAP_READ 映射只读。文件映射对象必须通过PAGE_READ 或 PAGE_READWRITE访问创建。
FILE_MAP_ALL_ACCESS 与FILE_MAP_WRITE相同。
FILE_MAP_COPY 映射时保留写操作的副本。文件映射对象必须用PAGE_WRITECOPY访问在win95下创建
返回值:
如果成功,则返回映射视图文件的开始地址值。
如果失败,则返回 NULL.可调用GetLastError()查看错误。