一则简单的Windows共享内存IPC代码
来源:互联网 发布:meego软件 编辑:程序博客网 时间:2024/06/06 21:45
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
- Two Sum
- Fragment 的生命周期及使用方法详解
- 关于PMO组织的项目启动会议的几点看法
- C++可变参数
- DataStage8.5客户端配置出错
- 一则简单的Windows共享内存IPC代码
- 恒大大胜最低消费
- loadrunner自带示例站点WebTour打不开的解决办法
- 改善C#编程的50个建议(1-5)
- table单元格和input的完美结合,兼容IE和火狐
- win7与ubuntu双系统安装
- Android Intent
- verilog中阻塞赋值和非阻塞赋值的区别
- OpenCV 之 Python API