windows编程学习——共享内存(三)

    xiaoxiao2021-12-14  18

    #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()查看错误。

    转载请注明原文地址: https://ju.6miu.com/read-965157.html

    最新回复(0)