进程间的通讯实现(IPC)的11种方法

原创 2003年03月24日 09:12:00

       进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:
       一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方
      另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的内存则是隐藏的,并不能被正在运行的线程访问。
   为了能在两个进程之间进行通讯,由以下几种方法可供参考:

0。剪贴板Clipboard: 在16位时代常使用的方式,CWnd中提供支持

1。窗口消息 标准的Windows消息以及专用的WM_COPYDATA消息 SENDMESSAGE()接收端必须有一个窗口

2。使用共享内存方式(Shared Memory)
   a.设定一块共享内存区域          
     HANDLE CreateFileMapping(HANDLE,LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD,  LPCSTR)
     产生一个file-mapping核心对象
     LPVOID MapViewOfFile(
         HANDLE hFileMappingObject,
         DWORD  dwDesiredAcess,
         DWORD  dwFileOffsetHigh,
         DWORD  dwFileOffsetLow,
         DWORD  dwNumberOfBytesToMap
     );
    得到共享内存的指针
   b.找出共享内存
    决定这块内存要以点对点(peer to peer)的形式呈现
        每个进程都必须有相同的能力,产生共享内存并将它初始化。每个进程
        都应该调用CreateFileMapping(),然后调用GetLastError().如果传回的
        错误代码是ERROR_ALREADY_EXISTS,那么进程就可以假设这一共享内存区         域已经被别的进程打开并初始化了,否则该进程就可以合理的认为自己 排在第          一位,并接下来将共享内存初始化。
    还是要使用client/server架构中
       只有server进程才应该产生并初始化共享内存。所有的进程都应该使用

HANDLE OpenFileMapping(DWORD dwDesiredAccess,
                                   BOOL bInheritHandle,
                                   LPCTSTR lpName);
        再调用MapViewOfFile(),取得共享内存的指针
   c.同步处理(Mutex)
   d.清理(Cleaning up) BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);
                        CloseHandle()

3。动态数据交换(DDE)通过维护全局分配内存使的应用程序间传递成为可能
   其方式是再一块全局内存中手工放置大量的数据,然后使用窗口消息传递内存    指针.这是16位WIN时代使用的方式,因为在WIN32下已经没有全局和局部内存    了,现在的内存只有一种就是虚存。  

4。消息管道(Message Pipe)
   用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序
   访问一个平面文件一样读写数据。
   匿名管道(Anonymous Pipes)
       单向流动,并且只能够在同一电脑上的各个进程之间流动。
   命名管道(Named Pipes)
       双向,跨网络,任何进程都可以轻易的抓住,放进管道的数据有固定的格        式,而使用ReadFile()只能读取该大小的倍数。
       可以被使用于I/O Completion Ports

5   邮件槽(Mailslots)
    广播式通信,在32系统中提供的新方法,可以在不同主机间交换数据,在        WIN9X下只支持邮件槽客户

6。Windows套接字(Windows Socket)
   它具备消息管道所有的功能,但遵守一套通信标准使的不同操作系统之上的应    用程序之间可以互相通信。

7。Internet通信 它让应用程序从Internet地址上载或下载文件

8。RPC:远程过程调用,很少使用,因其与UNIX的RPC不兼容。

9。串行/并行通信(Serial/Parallel Communication)
   它允许应用程序通过串行或并行端口与其他的应用程序通信

10。COM/DCOM
     通过COM系统的代理存根方式进行进程间数据交换,但只能够表现在对接口     函数的调用时传送数据,通过DCOM可以在不同主机间传送数据。

进程间的通讯实现(IPC)的11种方法

进程间的通讯实现(IPC)的11种方法 ...
  • tanliyoung
  • tanliyoung
  • 2007年06月27日 09:55
  • 655

进程间通信(IPC)之消息队列

漫谈进程间通信之消息队列,进程通信家族中不可或缺的一员。交流学习,共同进步。...
  • Xiao__Tian__
  • Xiao__Tian__
  • 2016年07月07日 01:24
  • 3532

Android进程间通信(IPC)之Socket

Socket也被称为“套接字”编程,它分为流式套接字和用户数据套接字两种,分别对应于网络传输控制中层中TCP和UDP协议。TCP协议是面向连接的协议,提供稳定的双向通信功能,TCP连接的建立需要经过”...
  • eyishion
  • eyishion
  • 2016年05月22日 16:45
  • 1075

进程间通信(IPC)之信号量

史上最全面剖析进程间通信下的信号量机制,细谈信号量,从基础学起,逐步深入。欢迎各位博友来访,交流学习,共同进步........
  • Xiao__Tian__
  • Xiao__Tian__
  • 2016年07月10日 00:54
  • 1456

linux C 编程 之 进程间通信(IPC)

一,POSIX 的无名信号量的函数有以下几个: #include ; int sem_init(sem_t *sem,int pshared,unsigned int value); int sem_...
  • cgm88s
  • cgm88s
  • 2013年10月24日 17:32
  • 664

IPC进程之间通信的几种方式

进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所...
  • lady_lili
  • lady_lili
  • 2016年09月22日 16:41
  • 1379

在操作系统中,进程之间是如何通信的?

进程间通信(IPC),指的是进程之间信息交换,所交换的信息量少则是一个状态或树枝,多则是成千上万个字节。用于进程间通讯的方式分为两类: 共享内存,消息机制 分类一转载自 http://www.cn...
  • cczz598
  • cczz598
  • 2015年04月22日 16:39
  • 1619

线程通信和进程通信区别(线程进程区别)

前言:腾讯笔试中多道选择题考到这个问题,这里总结一下。学习Java的童鞋可能对于线程的理解要比学php好很多。本文参考于线程通信与进程通信的区别 。 进程和线程的区别:对于进程来说,子进程是父进程的...
  • Return_True_hang
  • Return_True_hang
  • 2017年04月08日 10:37
  • 835

进程间通信 IPC、LPC、RPC

原文请见:进程间通信IPC、LPC、RPC进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的...
  • lanchunhui
  • lanchunhui
  • 2016年03月14日 12:54
  • 903

php进程间通信ipc及socket

本文将讨论在PHP4环境下如何使用进程间通讯机制——IPC(Inter-Process-Communication)。本文讨论的软件环境是linux+p...
  • eroswang
  • eroswang
  • 2008年03月18日 21:41
  • 9179
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程间的通讯实现(IPC)的11种方法
举报原因:
原因补充:

(最多只允许输入30个字)