【IPC进程间通讯之一】邮槽MailSlot

IPC进程间通信+邮槽MailSlot

        IPC(Inter-Process Communication,进程间通信)。

       现代计算机采用虚拟内存机制,为进程提供独立的足够大的地址空间,处于安全目的,一个进程不具有特殊的权限,是无法访问另一个进程的内存空间,进程间相互隔绝。进程间通信IPC就需要特别的机制来实现,邮槽MailSlot是常用的IPC方法之一。

        

       1.邮槽(MailSlot):

        

       邮槽MailSlot通信的进程分为服务端客户端。服务端创建MailSlot,创建时指定邮槽名,客户端同过邮槽名打开MailSlot。

       邮槽是单向的,服务端只能读取MailSlot,客户端只能写入MailSlot。服务端读取数据是先入先出,即先写入的数据先被读取。

        2.邮槽命名
:

        本机上格式:\\.\mailslot\[path\]name

        如:\\.mailslot\my_mailslot

       3.基本API函数

创建邮槽:

        HANDLE  CreateMailSlot(

                         
LPCTSTR  lpName,

                          DWORD     nMaxMessageSize,

                          DWORD     lReadTimeout,

                          LPSECURITY_ATTRIBUTES   lpSecurityAttributes
);

        第一个参数:邮槽名。

        第二个参数:最大消息长度。

        第三个参数:读取超时,设为0时,没有消息立即返回,MAILSLOT_WAIT_FORVER时,一直等待消息。

        第三个参数:安全属性,一般设为NULL。

        该函数创建一个Mailslot,并返回该邮槽的句柄。

读取邮槽:

        BOOL ReadFile(

HANDLE    hFile,

LPVOID     lpBuffer,

DWORD    nNumberOfBytesToRead,

LPDOWRD    lpNumberOfBytesRead,

LPOVERLAPPED   lpOverlapped);

        第一个参数:邮槽句柄。

        第二个参数:缓存地址。

        第三个参数:消息的长度。

        第四个参数:实际读取的长度。

        第五个参数:一般设置为NULL。

        该函数用于读取邮槽内数据。

打开邮槽:

        BOOL  CreateFile(

                     LPCTSTR   lpFileName,

DWORD     dwDesiredAccess,

DWORD     dwShareMode,

LPSECURITY_ATTRIBUTES   lpSecurityAttributes,

DWORD    dwCreationDisposition,

DWORD    dwFlagsAndAttributes,

HANDLE    hTemplateFile

);

         第一个参数:文件指针。

         第二个参数:访问模式。

         第三个参数:共享模式。

         第四个参数:安全属性指针。

         第五个参数:创建选项。

         第六个参数:文件属性。

         第七个参数:用于复制文件句柄。

         该函数用于客户端打开Mailslot。

写入邮槽:

        BOOL  WriteFile(

HANDLE    hFile,

LPCVOID   lpBuffer,

DWORD     nNumberOfBytesToWrite,

LPDWORD   lpNumberOfBytesWritten,

LPOVERLAPPED    lpOverlapped);

         第一个参数:文件句柄。

         第二个参数:数据缓冲区指针。

         第三个参数:写入字节数。

第四个参数:返回实际写入字节数。

第五个参数:结构体指针,一般置NULL。

该函数用于客户端向Mailslot写入数据。

 4.牛刀小试 : 

         先在VC6.0中运行服务端程序,在运行客户端程序:

 运行效果:

Mailslot服务端:

Mailslot客户端:

【IPC进程间通讯之一】邮槽MailSlot,布布扣,bubuko.com

时间: 2024-08-03 16:25:48

【IPC进程间通讯之一】邮槽MailSlot的相关文章

【IPC进程间通讯之二】管道Pipe

IPC进程间通信+管道Pipe         IPC(Inter-Process Communication,进程间通信).         管道用于进程间共享数据,其实质是共享内存,常用IPC之一.管道不仅可以用于本机进程间通信,还可实现跨网络进程间通信,如同Socket通信,管道同样封装计算机底层网络实现,提供一个良好的API接口.                1.管道(Pipe):        管道分为匿名管道和命名管道.        匿名管道只能用于父子进程间通信 ,不能跨网络通

进程间的通信——邮槽与命名管道d

进程间的通信是指在系统中两个或多个进程之间通过第三方进行数据共享. 1.邮槽. 邮槽是window系统提供的一种单向通信的机制.即进程中的一方只能写入或者读取数据,而另一方则只能读取或写入数据.通过邮槽,可以实现一对多或跨网络的进程之间的通信.但邮槽传输的数据量非常小,一般只有400KB左右. 邮槽创建函数CreateMailslot,函数原型: HANDLE CreateMailslot( LPCTSTR lpName, // mailslot name DWORD nMaxMessageSi

【IPC进程间通讯之三】内存映射文件Mapping File

IPC进程间通信+共享内存Mapping         IPC(Inter-Process Communication.进程间通信).         文件映射(Mapping)是一种将文件内容映射到内存地址的技术,通过对映射内存,读写文件如同读写内存一般简单.        多个进程映射同一个文件映射对象,也即多个进程映射到同一个物理存储页面,因此.当一个进程向映射内存写入数据时,其它进程能够通过映射内存读取数据.通过这个机制实现进程间通信.                  1.内存文件映

UNIX 进程间通讯(IPC)概念(Posix,System V IPC)

 IPC(Inter-Process Communication,进程间通讯)可以有三种信息共享方式(随文件系统,随内核,随共享内存).(当然这里虽然说是进程间通讯,其实也是可以和线程相通的). 相对的IPC的持续性(Persistence of IPC Object)也有三种: 随进程持续的(Process-Persistent IPC) IPC对象一直存在,直到最后拥有他的进程被关闭为止,典型的IPC有pipes(管道)和FIFOs(先进先出对象) 随内核持续的(Kernel-persist

linux进程间通讯-System V IPC 信号量

进程间通信的机制--信号量.注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物.有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信--使用信号.下面就进入信号量的讲解. 一.什么是信号量 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域.临界区域是指执行数据更新的代码需要独占式地执行.而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在

Android AIDL 进行进程间通讯(IPC)

编写AIDL文件时,需要注意: 1.接口名和aidl文件名相同. 2.接口和方法前不用加访问权限修饰符 (public.private.protected等,也不能用final.static). 3.AIDL默认支持的类型包括java基本类型 (int.long.boolean等) 和 (String.List.Map.CharSequence),使用这些类型时不需要import声明.对于List和Map中的元素类型必须是AIDL支持的类型,如果使用自定义类型作为参数或者返回值,自定义类型必须实

服务 远程服务 AIDL 进程间通讯 IPC

Activity aidl接口文件 package com.bqt.aidlservice;  interface IBinderInterface {     /* 更改文件后缀为[.aidl]去掉public等所有修饰符.         更改后,会在gen目录下生成一个同名的.java文件,此java文件中有一个名为[Stub]的内部类,此内部类继承自Binder类且实现了我们这里定义的IBinderInterface接口         此内部类的[asInterface(IBinder

Android(IPC)进程间通讯1:详解Binder由来?

完整原文:http://tryenough.com/android-ipc1 Android开发的进程间通讯,整个Android的应用都依赖于binder做底层通信机制.而Linux中提供的进程间通讯方式并没有binder机制,那么android中为什么要单独创造这种通讯方式呢?带着这个问题,继续往下读. Linux中进程相关概念 Linux将系统内存划分成了 用户空间 和 内核空间 两部分: 用户空间 : 普通应用程序则运行在用户空间上,它们不能使用某些特定的系统功能,不能直接访问硬件,不能直

ACE框架 基于共享内存的进程间通讯

ACE框架将基于共享内存的进程间通讯功能,如其它IO组件或IPC组件一样,设计成三个组件.流操作组件ACE_MEM_Stream,连接器组件ACE_MEM_Connector,以及接收连接组件ACE_MEM_Accpter.ACE框架为基于共享内存的进程间通讯提供了两种数据传输(分发deliver)策略.一种是使用生产者-消费者队列的一对多的多用户MT策略,另一种是使用socket流的可以使用反应器响应数据接收事件的Reactor策略.不论哪一种策略都要通过socket进行TCP连接,并进行进程