一则简单的Windows共享内存IPC代码
来源:互联网 发布:图片加白边是什么软件 编辑:程序博客网 时间:2024/06/06 19:43
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); }}
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
- Hdu3363 贪心
- poj2442---Sequence
- android jni方法模拟高频按键点击
- HDOJ1160 Fat Mouse's Speed
- POJ 3903 Stock Exchange(LIS)
- 一则简单的Windows共享内存IPC代码
- 如何求C语言字符串长度(strlen函数和sizeof关键字)
- 如果父视图半透明, 如何使子试图不是半透明
- 数据结构-双向链表(学习笔记)
- Elastos获取测试用例列表工具--gtci.py(get testcase info)
- 设计模式之观察者模式
- Linux环境PHP5.5以上连接SqlServer2008【全网最经典无错版】
- POJ 3084 Panic Room(最小割)
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解