1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java 内存映射文件进程间通讯_[转]Windows环境下利用“共享内存”实现进程间通信的C/

java 内存映射文件进程间通讯_[转]Windows环境下利用“共享内存”实现进程间通信的C/

时间:2020-07-02 13:44:05

相关推荐

java 内存映射文件进程间通讯_[转]Windows环境下利用“共享内存”实现进程间通信的C/

进程间的通信方式有很多种, 上次我们说了最傻瓜的“共享外存/文件”的方法。 那么, 在本文中, 我们即将学习“共享内存”的方式实现进程间的通信, 这是IPC最快的方法。有的地方又把这种“共享内存”的方式叫做“内存映射文件”方式。

我们首先来看看进程A对应的程序:

#include

#include

using namespace std;

#define BUF_SIZE 1025

char szName[] = "NameOfMappingObject"; // 共享内存的名字

int main()

{

// 创建共享文件句柄

HANDLE hMapFile = CreateFileMapping(

INVALID_HANDLE_VALUE, // 物理文件句柄

NULL, // 默认安全级别

PAGE_READWRITE, // 可读可写

0, // 高位文件大小

BUF_SIZE, // 地位文件大小

szName // 共享内存名称

);

char *pBuf = (char *)MapViewOfFile(

hMapFile, // 共享内存的句柄

FILE_MAP_ALL_ACCESS, // 可读写许可

0,

0,

BUF_SIZE

);

while(1)

{

cout << "input..." << endl;

char szInfo[BUF_SIZE] = {0};

gets(szInfo); // 其实gets并不安全

strncpy(pBuf, szInfo, BUF_SIZE - 1);

pBuf[BUF_SIZE - 1] = '\0';

}

UnmapViewOfFile(pBuf);

CloseHandle(hMapFile);

return 0;

}

然后, 我们再来看看进程B对应的程序:

#include

#include

using namespace std;

#define BUF_SIZE 1025

char szName[] = "NameOfMappingObject"; // 共享内存的名字

int main()

{

// 创建共享文件句柄

HANDLE hMapFile = CreateFileMapping(

INVALID_HANDLE_VALUE, // 物理文件句柄

NULL, // 默认安全级别

PAGE_READWRITE, // 可读可写

0, // 高位文件大小

BUF_SIZE, // 地位文件大小

szName // 共享内存名称

);

char *pBuf = (char *)MapViewOfFile(

hMapFile, // 共享内存的句柄

FILE_MAP_ALL_ACCESS, // 可读写许可

0,

0,

BUF_SIZE

);

while(1)

{

cout << "press any button to receive data..." << endl;

getchar();

cout << pBuf << endl;

}

UnmapViewOfFile(pBuf);

CloseHandle(hMapFile);

return 0;

}

先后运行上面两个程序, 得到的结果为(下图中的单词that应该是than, 我写错了

):

UNIX环境下的共享内存

好久没更新博客了,最近几个月一直在忙项目,现在终于有时间进一步学习了.这次记录的是unix环境中共享内存的使用方法. 在我理解,共享内存就是在内存中开辟一段空间,各个毫不相干的进程就可以通过访问这段 ...

Windows环境下利用github快速配置git环境

在windows环境下利用github客户端我们可以直接拥有可视化的界面来管理工程,当然你也可以选择你喜欢的命令行工具来做.今天我分享一个比较快速的方式来配置git环境. 先去下载github的win ...

Windows中利用共享内存来实现不同进程间的通信

Windows中利用共享内存来实现不同进程间的通信 一.msdn详细介绍 /zh-cn/windows/win32/memory/sharing-f ...

windows环境下利用Gitblit搭建Git服务器并实现自动部署Web站点目录

Git服务搭建多见于linux环境,但windows主机也不少,目前网上文章诸多不全,且以讹传讹,不甚清楚.下面介绍windows环境下的自动部署和发布. 所需环境及资源:Java环境.Gitblit ...

Windows环境下32位汇编语言程序设计(典藏版)

Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 7月出版 定价:99.00元 756页 1 ...

&lbrack;原&rsqb;我在Windows环境下的首个Libevent测试实例

libevent对Windows环境也有很好的支持,不过初次学习和编译libevent简单实例,总是有一些陌生感的,只有成功编译并测试了一个实例,才会有恍然大悟的感觉.下面将要讲到的一个实例是我从网上 ...

Nginx——在Windows环境下安装

下载 Nginx是开源软件,用户可以访问/网站获取源码包或Windows二进制文件下载.其中1.13.x版本为开发版本,1.12.0版本为稳定版本.开发版本分支会较 ...

Windows环境下多线程编程原理与应用读书笔记(1)————基本概念

自从学了操作系统知识后,我就对多线程比较感兴趣,总想让自己写一些有关多线程的程序代码,但一直以来,发现自己都没怎么好好的去全面学习这方面的知识,仅仅是完成了操作系统课程上的小程序,对多线程的理解也不是 ...

Windows环境下使用Nginx搭建负载均衡

前言 最近没有什么事情,喜欢总结并学习东西!前几天写来一个Session共享,那么我们为什么需要Session共享?因为我们的应用程序分布在多个服务器上,为了合理分配用户的请求,就需要用到负载均衡技术 ...

随机推荐

Python copy and deepcopy

Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块.1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deep ...

Java 集合系列 16 HashSet

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

winform 映射字段的写法:

public partial class FrmFieldMapping : DevComponents.DotNetBar.OfficeForm { private AMDataFieldC ...

印象笔记无法同步问题解决 Unable to send HTTP request&colon; 12029

问题 今天突然发现本地软件不能访问网络. 包括: 印象笔记无法同步, 搜狗输入法无法登陆. 但其它上网正常. 思路及解决过程 因为chrome上网 ,qq上网均正常. 且同事可以正常使用. 推测是本地 ...

javascript:设置URL参数的方法,适合多条件查询

适用场景:多条件查询情况,如下图所示: 通过设置URL参数,再结合数据源控件设置的RUL参数,就能进行简单的多条件查询了. javascript函数:

做了一道水题,把bzoj1503用Splay重新写了一下. #include #define rep(i, a, b) for (int i = a; i ...

day7、用户登陆出现-bash-4&period;1&dollar;错误的原因

有时候在使用用户登陆Linux系统时会出现-bash-4.1$错误,不显示用户名,路径信息. 原因:用户家目录里面与环境变量有关的文件被删除所导致的 .bash_profile .bashrc 这两个 ...

&lbrack;bzoj4849&rsqb;&lbrack;Neerc&rsqb;Mole Tunnels

来自FallDream的博客,未经允许,请勿转载,谢谢 貌似是省队集训女队讲的题... 今天在bzoj找一道题无果,但是翻到了这道就顺便写了下. 鼹鼠们在底下开凿了n个洞,由n-1条隧道连接,对于任意 ...

修复UEFI模式下Manjaro Linux启动问题

上周在更新Manjaro Linux的时候误触了电源键,导致内核更新了一半系统强制关机,重启时正常进入grub但无法正常引导进入系统. 由于不想重装系统(一大堆环境和工具的配置还是相当繁琐的),加上初 ...

zabbix钉钉报警

我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人: 编写,脚本需要放在zabbix的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找) find / -iname a ...

java 内存映射文件进程间通讯_[转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。