进程间的通信方式有很多种, 上次我们说了最傻瓜的“共享外存/文件”的方法。 那么, 在本文中, 我们即将学习“共享内存”的方式实现进程间的通信, 这是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详细介绍 https://docs.microsoft.com/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 2013年7月出版 定价:99.00元 756页 1 ...

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

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

Nginx——在Windows环境下安装

下载 Nginx是开源软件,用户可以访问 http://nginx.org/ 网站获取源码包或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.Office2007Form { 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;Neerc2016&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...相关推荐

  1. c++ 内存映射文件进程间共享数据

    int main(int argc, char *argv[])   {       //RecursiveDelete("C:\\20_128\\");       //Self ...

  2. php多进程共享数据库,PHP多进程环境下通过共享内存与信号量实现资源共享

    PHP多进程环境下通过共享内存与信号量实现资源共享 目前工作环境,由于一些原因,不能使用swoole,和其他多进程的管理组件.但是项目中有大量的功能必须通过多进程来实现.面对这也不能,那也不能的困境, ...

  3. Windows环境下(64bit,内存4G),安装虚拟机(VM12.5),Ubuntu(17.04),anaconda(Python3.6)和TensorFlow(1.3)

    以Windows7环境下为例,先在360软件管家里下载了一个"VMware Workstation 64位_12.5.7.0".(当然也可以在网上搜索其他版本的虚拟机.使用360软 ...

  4. 【Linux】进程间通讯

    前提知识 进程间具有独立性 ,现在我们要打破独立性,去通讯,所以 通讯的成本一定很高. 又时候又需要多进程协同完成某种业务内容 ,例如以前: cat file | grep "hello&q ...

  5. 《windows核心编程》 17章 内存映射文件

    内存映射文件主要用于以下三种情况: 系统使用内存映射文件载入并运行exe和dll,这大量节省了页交换文件的空间以及应用程序的启动时间 开发人员可以使用内存映射文件来访问磁盘上的数据文件.这使得我们可以 ...

  6. linux共享内存示例,linux 进程间共享内存示例

    写入端: #include #include #include #include #include using namespace std; struct MappingDataType { int ...

  7. 内存映射文件(File Mapping)API

    1.HANDLE CreateFileMapping(  HANDLE                  hFile,              // 一个文件句柄  LPSECURITY_ATTRI ...

  8. 【java】java中内存映射文件和IO

    转载:https://leokongwq.github.io/2017/02/25/java-memorymapped-file-and-io.html 对大多数Java开发人员来说,Java中的内存 ...

  9. linux进程间通讯的几种方式的特点和优缺点,和适用场合。

    http://blog.csdn.net/kakaka2011/article/details/6636661 1. 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有 ...

最新文章

  1. OpenCV学习笔记之改变图像的对比度和亮度
  2. linux下shell显示-bash-4.1$ 不显示路径解决方法
  3. POJ1236Network of Schools——强连通分量缩点建图
  4. QT显示图片和中途修改图片
  5. wamp3.1.0下载地址
  6. M8TSC预览版0.5.1发布
  7. 66.Systemd 命令
  8. m.微博各种接口分析
  9. 使用three.js的着色器通道一之渲染地球模型
  10. shared_ptr中的owner_before解析(最易懂,最全面)
  11. 大数据会议资料学习笔记201402
  12. 烤仔看世界 | “女王”的骗局
  13. 电脑连上网络,浏览器上不了网?
  14. RabbitMQ 中的 VirtualHost 该如何理解
  15. ubuntu16.04编译obmc
  16. 《算法笔记》9.4小节 9.5小节——数据结构专题(2)->二叉查找树(BST)->平衡二叉树(AVL)
  17. 使用SharePoint管理中心管理服务
  18. Winndowns 2008 mail邮件服务
  19. 编程语言摆地摊,我去逛了逛
  20. MPS——超小尺寸 IEEE802.3af PD 解决方案

热门文章

  1. smslib java_java利用SMSLib通过COM发送短信JAR包
  2. 安装很久_快看啦!吊轨推拉门安装图解在这里。
  3. 2021年古蔺高考成绩查询,古蔺中学2021录取分数线
  4. 如何防范SpringBoot 相关漏洞?
  5. 战争升级!Elasticsearch 从客户端向 AWS 开了一炮!
  6. 写过Mybatis插件?那说说自定义插件是如何加载的吧?
  7. 皮一皮:这几天最容易搞错的事情...
  8. Java 实现第三方 QQ 账号登录
  9. 每日一皮:程序猿的读书历程,最后一本​必备​!
  10. Spring Security 实战:使用 JWT 认证访问接口