【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
在通信协议的开发中,有的时候为了本地调试的需要,需要实现进程之间的通信。在windows系统中,进程通信的方式很多,比如说有管道通信、内存映射、socket通信、剪切板通信等等。但是,其中,我认为最好的方式还是内存映射的方式,简单、明了。因为通信的数据是被很多进程共享的,所以必要的互斥措施是非常必要的。只要处理好互斥的关系,内存映射可以为我们做好不少事情。
在内存映射中,所需要的基本函数其实非常简单:(1)创建文件映射,即函数CreateFileMapping;(2)打开文件映射,即函数OpenFileMapping;(3)关闭文件映射,即函数UnmapViewOfFile。名称是server和client识别的唯一媒介。下面就是一个范例,贴出来的代码是一个简单的服务端和客户端代码,略带修改。源代码来自于《精通Windows API,函数、接口、编程实例》,请注意版权声明。
服务端代码如下所示,
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define BUF_SIZE 256
LPTSTR szName = TEXT("mapObject");
LPTSTR szMsg = TEXT("msg");
void main(int argc, char* argv[])
{
HANDLE hMapFile;
LPTSTR pBuf;
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
BUF_SIZE,
szName
);
if(hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE)
{
return;
}
pBuf = (LPSTR)MapViewOfFile(hMapFile,
FILE_MAP_ALL_ACCESS,
0,
0,
BUF_SIZE);
if(NULL == pBuf)
{
return ;
}
CopyMemory(pBuf, szMsg, strlen(szMsg));
getch();
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
}
客户端代码如下,
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#pragma comment (lib, "User32.lib")
#define BUF_SIZE 256
LPTSTR szName = TEXT("mapObject");
void main(int argc, char* argv[])
{
HANDLE hMapFile;
LPTSTR pBuf;
hMapFile = OpenFileMapping(
FILE_MAP_ALL_ACCESS,
FALSE,
szName
);
if(hMapFile == NULL )
{
return ;
}
pBuf = (LPSTR)MapViewOfFile(hMapFile,
FILE_MAP_ALL_ACCESS,
0,
0,
BUF_SIZE);
if(NULL == pBuf)
{
return ;
}
printf(pBuf);
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
}
分享到:
相关推荐
软件随想录 软件随想录 软件随想录 软件随想录 软件随想录
代码随想录-八股文 pdf
代码随想录知识星球精华(最强⼋股⽂) 这份PDF总结了 代码随想录知识星球 的全部精华内容,覆盖了⼏乎程序员学习必备的内容。 知识星球⾥很多录友拿到了⼤⼚offer,包括科班 和 ⾮科班的,⽽他们的每⽇学习总结都是...
代码随想录算法PDF.rar
代码随想录算法PDF.zip
代码随想录-大厂八股文-面试
代码随想录 面试大厂八股文 手撕代码必备神器
代码随想录贪心算法知识,非常管用
软件随想录全集
代码随想录的pdf版本,不知道为啥放在电脑上面光删除不掉,所以网上保存一下下!
00.代码随想录-最强八股文-第3版-无密版本.pdf
「代码随想录」动态规划专题精讲(v1.2).pdf
代码随想录知识星球精华-大厂面试八股文v1.1.pdf
付费渠道买的,请珍惜
软件随想录_扫描版_5.79M
软件随想录
计算机教育_软件随想录_给计算机专业学子的建议知识.pdf
软件随想录.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
「代码随想录」程序员求职攻略
软件随想录+程序员必读pdf,让一个团队中的所有人朝同一个方向齐心协力地工作经验谈.