IPC进程间通信+管道Pipe

      
        IPC(Inter-Process Communication,进程间通信)。
        管道用于进程间共享数据,事实上质是共享内存。经常使用IPC之中的一个。管道不仅能够用于本机进程间通信,还可实现跨网络进程间通信,如同Socket通信,管道相同封装计算机底层网络实现,提供一个良好的API接口。
       
       1.管道(Pipe):


       管道分为匿名管道和命名管道。
       匿名管道仅仅能用于父子进程间通信 ,不能跨网络通信,而且通信是单向。
       命名管道可用于随意进程间通信,支持跨网络通信,而且通信是双向,随意一段都能够接收和发送数据。命名管道是学习的重点。
       命名管道通信进程分为服务端和client。服务端创建Pipe,client通过管道名连接该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   // 安全属性指针
);
        该函数用于server端创建命名管道。
等待client连接:
        BOOL  ConnectNamedPipe(

                     HANDLE    hNamedPipe,        //管道句柄

                     LPOVERLAPPED   lpOverlapped     //设为NULL

); 

        该函数用于server等待client连接到管道。
检查命名管道:
        BOOL  WaitNamedPipe(

                     LPCTSTR   lpNamedPipeName,  //管道名

                     DWORD     nTimeOut                  //超时

);
         该函数用于client检查是否存在管道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。

         该函数用于client向管道写入数据。


         4.牛刀小试 : 
         先在VC6.0中执行服务端程序,在执行client程序。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZWNvZGVsZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

         执行效果:


server程序:

client程序:



版权声明:本文博主原创文章。博客,未经同意不得转载。

【IPC第二个进程间通信】管道Pipe的更多相关文章

  1. Linux进程间通信 -- 管道(pipe)

    前言    进程是一个独立的资源管理单元,不同进程间的资源是独立的,不能在一个进程中访问另一个进程的用户空间和内存空间.但是,进程不是孤立的,不同进程之间需要信息的交互和状态的传递,因此需要进程间数据 ...

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

    IPC进程间通信+管道Pipe                IPC(Inter-Process Communication.进程间通信).         管道用于进程间共享数据,事实上质是共享内存 ...

  3. Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道

    Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...

  4. 【Linux 应用编程】进程管理 - 进程间通信IPC之管道 pipe 和 FIFO

    IPC(InterProcess Communication,进程间通信)是进程中的重要概念.Linux 进程之间常用的通信方式有: 文件:简单,低效,需要代码控制同步 管道:使用简单,默认阻塞 匿名 ...

  5. Linux进程间通信IPC学习笔记之管道

    基础知识: 管道是最初的Unix IPC形式,可追溯到1973年的Unix第3版.使用其应注意两点: 1)没有名字: 2)用于共同祖先间的进程通信: 3)读写操作用read和write函数 #incl ...

  6. Linux IPC(Inter-Process Communication,进程间通信)之管道学习

    1.标准流管道 管道操作支持文件流模式,用来创建链接还有一个进程的管道,通过函数popen和pclose popen的详细介绍在本blog:Linux 多进程学习中有具体介绍 2.无名管道(PIPE) ...

  7. Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)

    整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...

  8. Linux 进程间通信之管道(pipe),(fifo)

     无名管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信: 定义函数: int pipe(int f ...

  9. 进程间通信之管道--pipe和fifo使用

    匿名管道pipe 函数原型: #include <unistd.h> int pipe(int fildes[2]); 参数说明 fildes是我们传入的数组,也是一个传出参数.filde ...

随机推荐

  1. 线段树 [成段更新] HDU 1698 Just a Hook

    成段更新,需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候. 此处建议在纸上模拟一遍. Problem Descript ...

  2. 京东商城招聘匹配系统资深工程师 T4级别

    岗位级别:T4 岗位职责: 1.负责匹配系统的架构设计 2.负责网页抽取.实体识别.匹配等算法设计 3.核心代码编写,代码review 任职要求: 1.熟悉机器学习.自然语言处理理论和算法2.三年以上 ...

  3. WPF界面设计技巧(3)—实现不规则动画按钮

    原文:WPF界面设计技巧(3)-实现不规则动画按钮 发布了定义WPF按钮的教程后,有朋友问能否实现不规则形状的按钮,今天我们就来讲一下不规则按钮的制作. 不规则按钮的做法实际上和先前我们做不规则窗体的 ...

  4. 关于SVN配置文件的一个小例子

    1   背景假设 厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计.销售,并在北京.上海各设立了一个办事处.对于工作日志,原先采用邮件方式发给经理,但是这种方式 ...

  5. 一位同学3年通过CPA, CFA, ACCA的经验

    3 年从 ACCA!!! 今天收到 ACCA,只去考了一门,因为要下 field,可恶的 H R 和 manager 都不批准我的假.不过还好,功夫不负有心人,CPA 了,也是本科毕业那年. 本科结束 ...

  6. POJ 1838 Banana (并查集)

    Description Consider a tropical forrest, represented as a matrix. The cell from the right top corner ...

  7. Python学习入门基础教程(learning Python)--2.3.1 Python传参函数设计

    本节主要讨论设计传递多个参数子函数的设计方法. 在2.3节里我们讨论了如何自己设计一个带参数的子函数的设计方法,现在我们研究一下如何传递两个及以上参数的设计方法. 函数为何要带参数呢?其实原因很简单, ...

  8. Android permission 访问权限

    程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES ...

  9. QVector&lt;QString&gt; 显示器里面的动态数组元素QString和char *转变

    QVector类是一类提供了动态数组模板. QVector<T>是Qt普通容器类的一种. 它将自己的每个对象存储在连续的内存中.能够使用索引號来高速訪问它们.QList<T>. ...

  10. 尺取法 poj3061 poj3320

    尺取法就是反复推进区间的开头和结尾,来求满足条件的最下区间. poj3061 http://poj.org/problem?id=3061 给定一个都是正整数的序列,要我们求总和不小于S的连续子序列的 ...