使用文件映射共享数据

服务器端:

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { printf("========我是服务器端========/r/n"); HANDLE hMapFile; LPVOID pBuf; hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, _T("MyFileMapping")); if (hMapFile == NULL) { printf("创建文件映射失败!/r/n"); return -1; } pBuf = MapViewOfFile( hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE); if (pBuf == NULL) { printf("未分配到内存!/r/n"); return 2; } printf("按任意键读取客户端写入文件映射的参数.../r/n"); _getch(); //从客户端读取参数 int a, b, c; int* pIntBuf = (int*)pBuf; a = *(pIntBuf); pIntBuf++; b = *(pIntBuf); c = Plus(a, b); printf("服务器端接收到参数( %d, %d )/r/n", a, b); //写回计算结果 pIntBuf++; *pIntBuf = c; printf("服务器端计算出%d + %d = %d/r/n", a, b, c); UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return 0; } 

 

客户端:

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { printf("========我是客户端========/r/n"); HANDLE hMapFile; LPVOID pBuf; hMapFile = OpenFileMapping( FILE_MAP_ALL_ACCESS, FALSE, _T("MyFileMapping")); if (hMapFile == NULL) { printf("打开文件映射失败!/r/n"); return -1; } pBuf = MapViewOfFile( hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE); if (pBuf == NULL) { printf("未分配到内存!/r/n"); return -1; } //写入两个参数 int* pIntBuf = (int*)pBuf; int a = 14; int b = 18; *pIntBuf = a; pIntBuf++; *pIntBuf = b; printf("参数( %d, %d )已经从客户端发出,按任意键获取结果.../r/n", a,b); _getch(); pIntBuf++; int c = *pIntBuf; printf("客户端获得计算结果:%d/r/n", c); UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return 0; } 

 

 

测试运行结果:

========我是服务器端======== 按任意键读取客户端写入文件映射的参数... 服务器端接收到参数( 14, 18 ) 服务器端计算出14 + 18 = 32 请按任意键继续. . . ========我是客户端======== 参数( 14, 18 )已经从客户端发出,按任意键获取结果... 客户端获得计算结果:32 请按任意键继续. . . 

你可能感兴趣的:(使用文件映射共享数据)