一则简单的Windows共享内存IPC代码
来源:互联网 发布:阳西网络问政 编辑:程序博客网 时间:2024/05/17 08:20
Windows共享内存可以让两个进程对同一块内存进行读写。
以下有2个进程,a.cpp生成A进程,b.cpp生成b进程。那么a进程将不停地读名为"Global\\MyFileMappingObject"的共享内存块,而b进程不停地写名为"Global\\MyFileMappingObject"的共享内存块。从而实现IPC。
//a.cpp#include <windows.h>#include <string.h>#include <string>#include <iostream>#include <tchar.h>using namespace std;#define BUF_SIZE 256TCHAR szName[]=TEXT("Global\\MyFileMappingObject"); //指向同一块共享内存的名字int main(int argc, char *argv[]){ HANDLE hMapFile; LPCTSTR pBuf; hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // use paging file NULL, // default security PAGE_READWRITE, // read/write access 0, // maximum object size (high-order DWORD) BUF_SIZE, // maximum object size (low-order DWORD) szName); // name of mapping object if (hMapFile == NULL) { _tprintf(TEXT("Could not create file mapping object (%d).\n"), GetLastError()); return 1; } pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object FILE_MAP_ALL_ACCESS, // read/write permission 0, 0, BUF_SIZE); if (pBuf == NULL) { _tprintf(TEXT("Could not map view of file (%d).\n"), GetLastError()); CloseHandle(hMapFile); return 1; } //从main开始至此,A B process代码一样,都是获取名为"Global\\MyFileMappingObject"的共享内存的指针 //以下代码,A不停地读共享内存pBuf while(1) { cout<<pBuf<<endl; cout<<"A process: hit keyboard to receive from B process"<<endl; getchar(); } UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return 0;}
//b.cpp#include <iostream>#include <Windows.h>#include <tchar.h>using namespace std;#define BUF_SIZE 256TCHAR szName[]=TEXT("Global\\MyFileMappingObject"); //指向同一块共享内存的名字int main(){ HANDLE hMapFile; LPCTSTR pBuf; hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // use paging file NULL, // default security PAGE_READWRITE, // read/write access 0, // maximum object size (high-order DWORD) BUF_SIZE, // maximum object size (low-order DWORD) szName); // name of mapping object if (hMapFile == NULL) { _tprintf(TEXT("Could not create file mapping object (%d).\n"), GetLastError()); return 1; } pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object FILE_MAP_ALL_ACCESS, // read/write permission 0, 0, BUF_SIZE); if (pBuf == NULL) { _tprintf(TEXT("Could not map view of file (%d).\n"), GetLastError()); CloseHandle(hMapFile); return 1; } //从main开始至此,A B process代码一样,都是获取名为"Global\\MyFileMappingObject"的共享内存的指针 //以下代码,B不停写共享内存pBuf while(1) { TCHAR s[BUF_SIZE]; cout<<"B process: plz input sth. to be transfered to A process."<<endl; cin>>s; memcpy((PVOID)pBuf, s, BUF_SIZE); }}
http://www.cnblogs.com/lihaozy/archive/2012/08/14/2638009.html
0 0
- 一则简单的Windows共享内存IPC代码
- 一则简单的Windows共享内存IPC代码
- 一则简单的Windows共享内存IPC代码
- 一则简单的Windows共享内存IPC代码
- 一则简单的Windows共享内存IPC代码
- 一则简单的Windows共享内存IPC代码
- 一则简单的Windows共享内存IPC代码
- 一则简单的Windows共享内存IPC代码
- 管道、消息队列、共享内存几种IPC通信,简单的代码
- windows学习历程-IPC之共享内存
- IPC简单介绍(二)共享内存
- IPC-共享内存 (七猫的藏经阁 )
- Unix/Linux下的IPC---共享内存
- linux最快的IPC--共享内存
- 【Linux】IPC之间的共享内存
- IPC 共享内存
- IPC-shm 共享内存
- 共享内存IPC
- ADF Layout 组件
- 纵论资金池!
- svn 常见命令
- 2014多校联合第9场1011题||hdu 4970 树状数组
- 一个进销存数据库设计案例
- 一则简单的Windows共享内存IPC代码
- 标准正态分布函数的近似计算
- hdu 2177 取(2堆)石子游戏 (威佐夫博弈)(考虑如何变成奇异局势)
- 微营销时代已经到来
- Base64的编码和解码
- printf("good bye my last regional\n"); //ACM退役贴
- asp.net真的是并行处理request的吗?
- 标签不能放在声明之前;
- 定义协议规范收集