Windows进程间各种通信方式浅谈】的更多相关文章

1 Windows进程间通信的各种方法 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据以及它可利用的系统资源(如文件.管道等)组成. 多进程/多线程是Windows操作系统的一个基本特征.Microsoft Win32应用编程接口(Application Programming Interface, API) 提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通信(InterProcess Communication, IPC), 进程通信就…
转自 https://blog.csdn.net/microzone/article/details/7044266 权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/bjtbjt/article/details/7044266  1 Windows进程间通信的各种方法  进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据以及它可利用的系统资源(如文件.管道等)组…
Windows进程间共享内存通信实例 抄抄补补整出来 采用内存映射文件实现WIN32进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在WIN32进程中保留一段内存区域,把硬盘或页文件上的目标文件映射到这段虚拟内存中.注意:在程序实现中必须考虑各进程之间的同步问题. 在Windows操作系统下,任何一个进程不允许读取.写入或是修改另一个进程的数据(包括变量.对象和内存分配等),但是在某个进程内创建的文件映射对象的视图却能够为多个其他进程所映射,这些进…
本文内容: 1.进程通信的目的 2.介绍Linux下进程间的4种通信方式:管道,消息队列,共享内存,信号量 ps:套接字也可以用于进程间的通信,不过是不同物理机器上的进程通信,本章讨论是是同一台物理机器上的通信,套接字本章暂不讨论 一.进程间通信的目的 1)数据的传输 2)数据的共享 3)事件的通知 4)资源的共享 5)进程的控制 二.进程间的通信方式 1.管道 概念:管道是一种两个进程间进行单向通信的机制,因为管道传递数据的单向性,管道又称之为半双工管道 分类:匿名管道和有名管道 特点: 1)…
一.进程与进程通信   进程间通信(Interprocess Communication, IPC)是指不同的进程之间进行数据共享和数据交换. 二.进程间通信方式 1.  文件映射 注:文件映射是在多个进程间共享数据的非常有效方法,有较好的安全性.但文件映射只能用于本地机器的进程之间,不能用于网络中,而开发者还必须控制进程间的同步. 使用内存映射文件的一般流程:(reference from: https://blog.csdn.net/qq_20183489/article/details/5…
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613027.html 锲子:进程与线程是什么,他们的区别在哪里: 1 进程概念 进程是程序的一次动态执行过程.程序本身只是指令的集合,进程才是程序的真正运行,用户运行程序就产生了进程,用户关闭程序就结束了进程.一个程序可以产生多个进程,但一个进程只能由一个程序产生.进程有5种生命周期状态:创建.就绪.运行.阻塞.退出,下图表示了5种状态之间的关系. 与上面的5种状态不同,在Linux中使用t…
Windows平台为我们提供了多种进程间通信的机制,主要包括:注册表方式.共享文件方式.共享内存方式.共享数据段.映射文件方式.管道方式. 剪贴板方式.消息方式.其中注册表方式需要增加注册表表项,而注册表一般不应删改,所以此种方式不被推荐:共享数据段需要借助动态链接库,实现起来比较麻 烦,这种方式也不被推荐.下面重点介绍一下其它几种进程间通信的实现方式. 1.共享文件方式 (1)数据发送 数据发送进程为通过Cfile类创建一个共享文件,然后调用Write()方法想文件中写入数据,具体如下: vo…
进程的概念 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放.可以认为进程是一个程序的一次执行过程. 进程通信的概念 进程用户空间是相互独立的,一般而言是不能相互访问的.但很多情况下进程间需要互相通信,来完成系统的某项功能.进程通过与内核及其它进程之间的互相通信来协调它们的行为. 进程通信的应用场景 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间. 共享数据:多个进程想要操作共享数据,一个…
linux进程间的通信 进程间的通信就是不同的进程之间传播或交换信息,进程的用户空间是互相独立,进程之间可以利用系统空间交换信息. 管道 允许将一个进程的标准输出和另一个进程的标准输入连接在一起,主要用于不同进程之间的通信,linux shell允许重定向,而重定向使用的就是管道. 信号量 信号量是一种技术器,可以控制进程间多个线程或者多个进程对资源的同步访问,它常实现为一种锁机制. 信号 用在一个或者多个进程之间传递异步信号.操作系统通过信号来通知某一进程发生了某一种预定好的事件 共享内存 共…
线程同步内核对象 操作系统进行进程间同步是利用信号量机制.对于windows系统而言,可以利用一些内核对象进行线程同步,因为这些内核对象可以命名并且属于系统内核,所以可以支持不同进程间的线程同步进而实现进程间同步.例如:事件对象,可等待的计时器对象,信号量对象,互斥量对象. 事件对象 事件对象分为手动重置事件对象和自动重置事件对象.手动重置事件对象是指在对象被触发后,WaitForSignalObject()函数返回后会立即将对象设置为未触发状态,所以这种只能实现一个等待线程被调度.而自动重置事…
消息队列 windows系统是通过消息驱动的,每移动一下鼠标,点击一下屏幕都会产生一个消息.这些消息会先被放在windows的一个系统消息队列(先进先出)中,windows系统会为每一个GUI线程创建一个线程消息队列,然后系统会从系统消息队列中取出一个消息放到对应的线程消息队列中.之后通过消息循环从线程消息队列中取出消息分发派遣到对应的窗口的窗口过程中. 线程消息队列是如何创建的 系统消息队列是由windows操作系统默认创建的,而对于普通的线程而言是没有线程消息队列的.线程刚创建时为普通线程,…
Windows中同一个EXE文件多次加载过程 Windows中EXE文件加载是基于内存映射文件的. 当EXE文件第一次被加载. 首先系统会先创建一个进程内核对象,并创建一个新的进程地址空间. 系统调用CreateFile打开对应的exe文件. 根据PE文件的路径创建文件映射对象,调用CreateFileMapping的参数fdwProtect传入SEC_IMAGE表示映射的文件是一个PE文件,这样系统会按照PE文件头中指定的信息在进程空间指定的地址处预留指定大小的区域,接着调用MapViewOf…
内存映射文件原理 内存映射文件是通过在虚拟地址空间中预留一块区域,然后通过从磁盘中已存在的文件为其调度物理存储器,访问此虚拟内存空间就相当于访问此磁盘文件了. 内存映射文件实现过程 HANDLE hFile = CreateFile(...); //创建文件对象 HANDLE hFileMapping = CreateFileMapping(hFile, ...); //创建文件映射对象 MapViewOfFile(hFileMapping, ...); //在虚拟地址空间上建立映射 //其他操…
管道的分类 管道其实际就是一段共享内存,只不过Windows规定需要使用I/O的形式类访问这块共享内存,管道可以分为匿名管道和命名管道. 匿名管道就是没有名字的管道,其支持单向传输数据,如果需要双向传送数据就需要创建两条管道.而且其只支持具有父子关系的两个进程进行通信,不能在网络间进行通信. 命名管道就是有名字的管道,其支持双向传输数据,因此一般还需要创建一条命名管道实现两个进程间的通讯.他的实现类似于我们了解的客户端/服务端.他能在任意进程间进行通讯. 匿名管道 typedef struct…
版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正.   1.使用共享内存 代码如下: void FileMapping(void) { //打开共享的文件对象. m_hMapFile = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE,_T("TestFileMap")); if (m_hMapFile) { //显示共享的文件数据. LPTSTR lpMa…
WM_COPYDATA通讯思路 通过向其他进程的窗口过程发送WM_COPYDATA消息可以实现进程间通讯. 只能通过SendMessage发送WM_COPYDATA消息,而不能通过PostMessage发送WM_COPYDATA消息.因为系统必须管理用以传递数据的缓冲区的生命期,如果使用了PostMessage(),数据缓冲区会在接收方(线程)有机会处理该数据之前,就被系统清除和回收.所以应该使用SendMessage,这样就能在接收方处理数据之前使发送方处于阻塞状态,发送数据的缓冲区不会被清除…
Windows套接字 Windows套接字即socket,通过socket可以实现在不同的进程间通信,甚至这两个进程可以不在同一个计算机中. Winsock使用步骤 服务端 socket初始化 创建套接字 绑定和监听端口 因为是本地连接,所以监听地址为0.0.0.0. 接着就调用accept()接收客户端连接. 客户端 socket初始化和创建套接字都和服务端一样. 主动连接服务器 因为是本地连接,所以ip地址为127.0.0.1. 这样客户端和服务端两个进程就可以通讯了.…
<Windows Azure Platform 系列文章目录> 最近在和一些客户聊天,常常被遇到这样的问题: 1.问题一:我在创建一个新的Windows Azure Virtual Machine的虚拟机时候,会同时创建同样名称的Cloud Service(云服务). 我看微软的报价里说虚拟机会收费,云服务也会收费.这样的话,我使用虚拟机,是不是收取我虚拟机+云服务=2倍的费用? 2.问题二:我在使用VS2013,将asp.net的应用程序部署到微软的PaaS平台的时候,只会有Cloud Se…
在用python编写代码时,往往需要用到第三方库,那么python如何去用第三方库呢,首先我们先来看看是如何安装的,方法可能会很多,但这边只介绍一种,其它请百度或google 比如asyncio,这里简单介绍下asyncio asyncio可以实现单线程并发IO操作.如果仅用在客户端,发挥的威力不大.如果把asyncio用在服务器端,例如Web服务器,由于HTTP连接就是IO操作,因此可以用单线程+coroutine实现多用户的高并发支持.asyncio实现了TCP.UDP.SSL等协议,aio…
Windows没有message queue累世的IPC内核对象,使得在在处理IPC时少了一种传递消息的手段. 利用Windows的Naming Object可以实现一套简单的Inter-Thread消息队列.这里并不使用socket,因为一旦使用socket,就得负责port管理,很麻烦,另外在对外接口上也很难和vxworks等msgq接口保持一致.所以后来干脆把接口定义成了类vxworks接口. 偶然间看了一眼云风的http://blog.codingnow.com/中关于windows进程…
Android进程间的通信方式可以通过以下两种方式完成: Android接口定义语言(AIDL) 使用Messenger绑定服务 本文我们将学习使用Messenger绑定服务的方式进行进程间的通信. Android AIDL和Messenger区别 使用Messenger是执行进程间通信最简单的方法,因为Messenger会在单一线程中创建包含所有请求的队列,这样您就不必对服务进行线程安全设计.而纯粹的AIDL接口会同时向服务发送多个请求,服务随后必须应对多线程处理.AIDL通常应用在服务被设计…
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身 Android查缺补漏(IPC篇)-- Bundle.文件共享.ContentProvider.Messenger四种进程间通讯介绍 Android查缺补漏(IPC篇)-- 款进程通讯之AIDL详解 Android查缺补漏(IPC篇)-- 跨进程通讯之Socket…
#-*-coding:utf-8-*- '''python提供了多种进程间的通信方式,如:Queue,Pipe,Valie+Array等. Queue与Pipe的区别在于Pipe常用来在两个进程间通信,Queue用来在多个进程间通信 Queue: Put:用于插入数据到队列中(blocked,timeoutl两个可选参数,如果blocked为True(默认值) 并且timeout为正值,该方法会阻塞timeout指定时间,指导队列有剩余空间,如果超时,会抛出Queue.Full异常, 如果blo…
在上一篇中介绍了Andorid中的进程间的通信方式AIDL,本篇文章将介绍传递复杂数据的AIDL Service 下面通过一个示例说明: 本例子中用到了两个自定义类型:Person与Pet, 其中Person对象作为调用远程Service的参数,而Pet将作为返回值.就像RMI要求远程调用的参数和返回值必须实现Serializable接口,Android要求调用远程Service的参数和返回值都必须实现Parcelable接口. 实现Parcelable接口不仅要求实现该接口里定义的方法,还有两…
32位Windows采用虚拟内存技术使每个进程虚拟4G内存,在逻辑上实现了对进程之间数据代码的分离与保护.那么相应的进程之间的通信也就有必要整理掌握一下. Windows进程间通讯的方法有很多:管道.邮件槽.剪切板.共享内存.消息.套接字.RPC.DDE等. 但是他们大部分拥有一个共同的本质:利用Windows操作系统高2GB内核共享空间进行数据传递的桥梁,所以他们都是内核对象! 所以他们大部分都要遵循:A创建对象-->A写入数据-->B打开A创建的对象-->B读入数据的规则 下面着重通…
前言 如果你是一个编程初学者,如果你刚刚结束C语言的课程.你可能会有点失望和怀疑:这就是C语言吗?靠它就能编出软件?无法想象Windows桌面上一个普通的窗口是怎样出现在眼前的.从C语言的上机作业到Windows编程确实有比较大的gap.或许你已经看了programming Windows的前三章,但是对于那个hellowin程序甚为迷惘.希望hfire的这篇文章能帮你填补这个gap,并提供一些学习的经验.为什么是浅谈,因为hfire知道的也不够深,肯定会有错误,请批评指正. 程序与运行时环境及…
浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍 前记 自己是搞编程的,首先我是一个菜鸟,接触计算机这么久了,感觉很多计算机方面的技术和知识朦朦胧胧.模模糊糊,貌似有些贻笑大方了:所以最近腾出了点时间来了解计算机的基础知识,准备整理整理这些知识,我想也为时不晚. 说来整理,其实并非一件易事,各人的视野都是有限的,当然“百事通”我是做不来的,还是实实在在的拿出来分享分享,贻笑贻笑大方,让大家拍拍板砖也未尝不可. 为什么要学习批处理? 首先,我是一个后生,自从接触计算机就一直使用的…
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings name="  " connectionString="  "></connectionStrings >, connectionString代表数据库链接字符串,name代表你想要引用的时候查找的名称.(其实asp里的web.config配置方式也跟这…
WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制…… WinSDK是编程中的传统难点,曾经听有一个技术不是很好的朋友乱说什么给你API谁都会用,其实并非那么简单,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制. 首先来谈谈句柄,初学习WinSDK的朋友刚看到这个词头大了吧?…
http://blog.codingnow.com/2005/10/interprocess_communications.html Windows 下有很多方法实现进程间通讯,比如用 socket,管道(Pipe),信箱(Mailslot),等等.但最基本最直接的还是使用内存共享.其他方法最终还是会绕道这里. 可想而知,如果物理内存只有一份,让这份内存在不同的进程中,映射到各自的虚拟地址空间上,每个进程都可以读取同一份数据,是一种最高效的数据交换方法.下面我们就讨论如何实现它. 共享内存在 W…