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

IPC进程间通信+管道Pipe

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

        管道用于进程间共享数据,其实质是共享内存,常用IPC之一。管道不仅可以用于本机进程间通信,还可实现跨网络进程间通信,如同Socket通信,管道同样封装计算机底层网络实现,提供一个良好的API接口。

       

       1.管道(Pipe):

       管道分为匿名管道和命名管道。

       匿名管道只能用于父子进程间通信 ,不能跨网络通信,并且通信是单向。

       命名管道可用于任意进程间通信,支持跨网络通信,并且通信是双向,任意一段都可以接收和发送数据。命名管道是学习的重点。

       命名管道通信进程分为服务端和客户端,服务端创建Pipe,客户端通过管道名连接该Pipe之后,双方均可通过该Pipe发送和接收数据。

       

        2.邮槽命名 :

       本机上格式:\\ServerName\Pipe\name

       如:\\.\Pipe\my_pipe

       3.基本API函数 :

创建命名管道:

        HANDLE    CreateNamedPipe(

                        LPCTSTR   lpName,                // 指向管道名称的指针

                        DWORD     dwOpenMode,       // 管道打开模式

                        DWORD     dwPipeMode,
      // 管道模式

                        DWORD     nMaxInstances,     // 最大实例数

                        DWORD     nOutBufferSize,   // 输出缓存大小

                        DWORD     nInBufferSize,       // 输入缓存大小

                        DWORD    nDefaultTimeOut, // 超时设置

LPSECURITY_ATTRIBUTES lpSecurityAttributes   // 安全属性指针

);

该函数用于服务器端创建命名管道。

等待客户端连接:

        BOOL  ConnectNamedPipe(

HANDLE    hNamedPipe,        //管道句柄

LPOVERLAPPED   lpOverlapped     //设为NULL

);

        该函数用于服务器等待客户端连接到管道。

检查命名管道:

        BOOL  WaitNamedPipe(

LPCTSTR   lpNamedPipeName,  //管道名

DWORD     nTimeOut                  //超时

);

         该函数用于客户端检查是否存在管道Pipe。

打开命名管道:

        BOOL  CreateFile(

                     LPCTSTR   lpFileName,

DWORD     dwDesiredAccess,

DWORD     dwShareMode,

LPSECURITY_ATTRIBUTES   lpSecurityAttributes,

DWORD    dwCreationDisposition,

DWORD    dwFlagsAndAttributes,

HANDLE    hTemplateFile

);

         第一个参数:管道名指针。

         第二个参数:访问模式。

         第三个参数:共享模式。

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

         第五个参数:创建选项。

         第六个参数:文件属性。

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

         该函数用于打开一个管道,并返回管道句柄。

读取管道:

BOOL ReadFile(

HANDLE    hFile,

LPVOID     lpBuffer,

DWORD    nNumberOfBytesToRead,

LPDOWRD    lpNumberOfBytesRead,

LPOVERLAPPED   lpOverlapped);

        第一个参数:管道句柄。

        第二个参数:缓存地址。

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

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

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

        该函数用于读取管道内数据。

写入管道:

        BOOL  WriteFile(

HANDLE    hFile,

LPCVOID   lpBuffer,

DWORD     nNumberOfBytesToWrite,

LPDWORD   lpNumberOfBytesWritten,

LPOVERLAPPED    lpOverlapped);

         第一个参数:管道句柄。

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

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

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

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

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

         4.牛刀小试 : 

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

    运行效果:

服务器程序:

客户端程序:

【IPC进程间通讯之二】管道Pipe,布布扣,bubuko.com

时间: 2024-12-09 19:00:07

【IPC进程间通讯之二】管道Pipe的相关文章

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

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

嵌入式OS入门笔记-以RTX为案例:八.RTX的进程间通讯(二)

嵌入式OS入门笔记-以RTX为案例:八.RTX的进程间通讯(二) RTX的进程间通讯主要依赖于四种机制,分别是事件(Event),互斥锁(Mutex),旗语或信号量(Semaphore),和邮箱(Mailbox).前三种机制侧重进程间的同步,邮箱则侧重进程间的数据通讯.这次讲一下信号量和邮箱. 1.信号量(Semaphore) 1.简介 信号量其实是一个很抽象的操作系统原语,它最早由荷兰计算机科学家Dijkstra提 出,用于解决多项资源的分配问题.实际上信号量的适用范围非常广,可以很好地解决很

进程间通讯之有名管道

进程通信是指在进程间交换信息(传输数据).目前的计算机系统均提供了多任务并行环境,无论是应用程序还是系统程序,都需要针对每一个任务创建相应的进程. 每个进程之间都是相互独立的,不同的进程运行在各自不同的内存空间中,因此,进程之间的信息传递不可能通过变量或其他数据结构直接进行,只能通过进程间通讯完成. 进程间通讯方式:信号 .管道.信号量.消息队列.共享内存.Socket 今天介绍一下通过管道进行程序间的通讯.管道分为有名管道和无名管道. (管道文件)(半双工通讯:数据流向是单向的.) 有名管道:

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

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

进程间通讯之 命名管道

命名管道其实用的还是API函数,我估计是底层应该是操作系统 分配了一块单独的内存空间,两个程序或是多个程序都可以对这块内存进行读写. 这些所谓的管道API函数,就是我们编程人员操作这些内存空间的方法. ××××××××××××××××××××××××××××××××××××× 用到的API函数 管道服务器首次调用CreateNamedPipe()函数时,使用nMaxInstance参数指定了能同时存在的管道实例的最大数目.服务器可以重复调用CreateNamedPipe()函数去创建管道新的实例

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

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

管道实现进程间通讯 、WaitNamedPipe

一.管道实现进程间通讯 主要的理论知识 1.什么是管道以及分类 管道是两个头的东西,每一个头各连接一个进程或者同一个进程的不同代码,依照管道的类别分有两种管道,匿名的和命名的:依照管道的传输方向分也能够分成两种,单向的双向的.依据管道的特点,命名管道通经常使用在网络环境下不同计算机上执行的进程之间的通信(当然也能够用在同一台机的不同进程中)它能够是单向或双向的:而匿名管道仅仅能用在同一台计算机中,它仅仅能是单向的.匿名管道事实上是通过用给了一个指定名字的有名管道来实现的. 使用管道的优点在于:读

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

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

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

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