共享内存应用于进程通信

在进程间通信时,使用共享内存的效率应该是最低的。现进行简单说明。 应用共享内存时,一共使用到如下4个函数 HANDLE CreateFileMapping( HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCTSTR lpName ); 这个函数的第一个参数一般使用(HANDLE)0XFFFFFFFF, 倒数第二个参数使用要传递的数据大小, 最后一个参数是用CreateFileMapping函数生成的映射名(对于这个来说) LPVOID MapViewOfFile( HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap ); 这个函数是把内存地址跟要传递的文件进行映射 第一个参数就是CreateFileMapping函数的返回值 最后一个参数说明被映射到地址的数据大小,如果为0,则说明是全部被映射。 BOOL UnmapViewOfFile( LPCVOID lpBaseAddress ); 关闭映射的地址空间 在读文件的另一个进程中 HANDLE OpenFileMapping( DWORD dwDesiredAccess, // access mode BOOL bInheritHandle, // inherit flag LPCTSTR lpName // object name ); 最后一个参数就是CreateFileMapping中最后一个参数的值 MapViewOfFile()就可以读出其值了。 最后的例子如下 写内存的例子 #include "stdafx.h" #include "windows.h" #include using namespace std; class student{ public: long ID; char name[20]; }; int main(int argc, char* argv[]) { HANDLE hMemShare; student stu; int stu_num = 30; student *lpstu; stu.ID = 99041232; strcpy(stu.name,"SecBug"); hMemShare = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0,sizeof(student),"TestMemShare"); if(hMemShare == NULL){ cout << "allocate is error"< using namespace std; class student{ public: long ID; char name[20]; }; int main(int argc, char* argv[]) { HANDLE hMemShare; student stu; student *lpstu; stu.ID = 0; strcpy(stu.name ,"tst"); hMemShare = OpenFileMapping(FILE_MAP_READ,FALSE,"TestMemShare"); if(hMemShare == NULL){ cout << "openfilemapping error"<< endl; return 0; } lpstu = (student*)MapViewOfFile(hMemShare,FILE_MAP_READ,0,0,sizeof(student)); if(lpstu == NULL){ cout << "MapViewOfFile error"<< endl; return 0; } stu = *lpstu; cout< <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值