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程序。
         执行效果:

server程序:
client程序:

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

转载于:https://www.cnblogs.com/bhlsheji/p/4913307.html

【IPC第二个进程间通信】管道Pipe相关推荐

  1. #Linux#进程间通信# 管道(pipe)-标准流管道pipe

    在#Linux#进程间通信# 管道(pipe)-普通管道pipe中,我们很容易可以看出普通管道一是单工,即只能单向传输,而标准流管道针对匿名管道PIPE一系列封装.返回文件流.只不过返回的文件流无法使 ...

  2. #Linux#进程间通信# 管道(pipe)-匿名管道pipe

    我们通常把一个进程连接到另一个进程的一个数据流称为一个"管道",通常是用作把一个进程的输出通过管道连接到另一个进程的输入.管道本质上是内核的一块缓存.内核使用环形队列机制,借助内核 ...

  3. Android 进程间通信之管道 - pipe

    文章目录 Android 进程间通信专栏 linux支持的进程间通信 管道 - pipe 概要 配置环境 android 系统中使用管道的场景 Android 进程间通信专栏 linux支持的进程间通 ...

  4. linux操作系统进程间通信IPC之管道pipe及FIFO

    linux环境下,各进程相互独立,如果想要交换两个进程之间的数据,需要通过内核,在内存中提供一个缓存区,一个进程往缓存区中写数据,一个往缓存区读数据,内核提供的这种机制称为进程间通信(IPC),常见的 ...

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

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

  6. linux学习---linux基于文件的IPC(匿名管道pipe,命名管道mkfifo,普通文件,socket文件)

    常用的IPC分为两个类别,一是基于文件,而是基于内存 基于文件的分别有匿名管道,有名管道,普通的文件共享,socket文件 基于内存的有普通内存共享(本文章没有介绍),共享内存,共享信号量,消息队列 ...

  7. Windows API 进程间通信,管道(Pipe)

    2019独角兽企业重金招聘Python工程师标准>>> 转载自:Windows API 进程间通信,管道(Pipe) 管道是一种用于在进程间共享数据的机制,其实质是一段共享内存.Wi ...

  8. Linux进程间通信(管道、消息队列、共享内存、信号、信号量)

    目录 Linux进程间通信概述 1.管道 无名管道(pipe) 有名管道(fifo) 2.消息队列(msg) 消息队列的通信原理 消息队列相关api 消息队列收发数据 键值生成 消息队列移除 3.共享 ...

  9. Linux下进程间通信——管道

    进程间通信 一.进程间通信 1.进程间通信--管道 (1)有名管道的创建 (2)有名管道的操作 写操作 读操作 发生阻塞和关闭程序的几种情况 2.无名管道的创建 (1)无名管道的操作 3.管道读取数据 ...

最新文章

  1. R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)、如果没有指定行标识符号,则所有的字段都会放入variable变量中
  2. 如何撤消Git中的最新本地提交?
  3. [Spring cloud 一步步实现广告系统] 21. 系统错误汇总
  4. S3C2440时钟体系结构
  5. WPF中的一些常用类型转换
  6. Ubuntu 17.10安装Qt 5.10环境与Qt Creator 4.5开发工具(转自linux公社)
  7. java mock server_java – 使用MockRestServiceServer模拟REST调用
  8. 传感器的定义、构成、分类
  9. 黑客之门:深入浅出windows的dll文件[图]
  10. 光谱共焦位移传感器原理和特性
  11. 动词的过去式过去分词表
  12. 5G技术在物联网行业的应用
  13. 元气骑士双人异地公网联机工具(仅支持双人、JAVA实现)
  14. putty下载上传文件
  15. 短信验证码的发展和原理
  16. java jtextarea滚动条下滑,JTextArea更新时滚动条自动在最上面或者在最下面的方法...
  17. 桌面软件图标变成白纸的解决方法
  18. wordpress教程之函数讲解
  19. Markdown技术
  20. 扩展activiti 支持任意属性扩展

热门文章

  1. 蓝桥杯 基础练习 报时助手(c++)
  2. Java currentTimeMillis()方法介绍
  3. Android卡片滑动切换动画,Android原生ViewPager控件实现卡片翻动效果
  4. Apollo 配置中心介绍
  5. asterisk帮助与国内论坛
  6. Metro UI CSS 学习笔记之 基础组件
  7. 虚拟化技术xen的简介和安装
  8. C#开发支持二次开发的平台,支持软件内动态添加脚本
  9. 无线网络破解的一次奇妙之旅!
  10. phantom的使用