C++共享内存实现

匿名 (未验证) 提交于 2019-12-03 00:18:01

服务端:(1)创建写入数据

#include "stdafx.h" #include <windows.h> #include <iostream>  using namespace std;  #define BUF_SIZE 4096  int main() { 	// 定义共享数据 	char szBuffer[] = "我姓易,却发现爱你不易。";  	// 创建共享文件句柄  	HANDLE hMapFile = CreateFileMapping( 		INVALID_HANDLE_VALUE,   // 物理文件句柄 		NULL,   // 默认安全级别 		PAGE_READWRITE,   // 可读可写 		0,   // 高位文件大小 		BUF_SIZE,   // 低位文件大小 		L"ShareMemorySZHC"   // 共享内存名称 	);  	// 映射缓存区视图 , 得到指向共享内存的指针 	LPVOID lpBase = MapViewOfFile( 		hMapFile,            // 共享内存的句柄 		FILE_MAP_ALL_ACCESS, // 可读写许可 		0, 		0, 		BUF_SIZE 	);  	// 将数据拷贝到共享内存 	strcpy((char*)lpBase, szBuffer); 	cout <<"服务:"<< (char*)lpBase << endl;  	// 线程挂起等其他线程读取数据 	Sleep(20000);  	// 解除文件映射 	UnmapViewOfFile(lpBase); 	// 关闭内存映射文件对象句柄 	CloseHandle(hMapFile); 	return 0; }

客户端:(1)打开读出数据

#include "stdafx.h" #include <iostream>   #include <windows.h>   using namespace std;  #define BUF_SIZE 4096  int main() { 	// 打开共享的文件对象 	HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, NULL, L"ShareMemorySZHC"); 	//cout << hMapFile << endl;  	if (hMapFile) { 		LPVOID lpBase = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0); 		// 将共享内存数据拷贝出来 		char szBuffer[BUF_SIZE] = { 0 }; 		strcpy_s(szBuffer, (char*)lpBase); 		cout <<"客户:"<< szBuffer << endl;  		// 解除文件映射 		UnmapViewOfFile(lpBase); 		// 关闭内存映射文件对象句柄 		CloseHandle(hMapFile);  	} 	else { 		// 打开共享内存句柄失败 		cout << "打开共享失败!" << endl; 	} 	return 0; } 
运行截图


文章来源: C++共享内存实现
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!