BOOL CreatePipe(PHANDLE hReadPipe, // 指向读句柄的指针
 PHANDLE hWritePipe, // 指向写句柄的指针
 LPSECURITY_ATTRIBUTES lpPipeAttributes, // 指向安全属性的指针
 DWORD nSize // 管道大小);

管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道server,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,还有一进程就能够从管道的还有一端将其读取出来。匿名管道(Anonymous Pipes)是在父进程和子进程间单向数据传输的一种未命名的管道,仅仅能在本地计算机中使用,而不可用于网络间的通信。

管道server将lpPipeAttributes 指向的SECURITY_ATTRIBUTES数据结构的数据成员bInheritHandle设置为TRUE,那么CreatePipe()创建的管道读、写句柄将会被继承

父进程能够调用进程创建函数CreateProcess()生成子进程。假设父进程要发送数据到子进程,父进程可调用WriteFile()将数据写入到管道(传递管道写句柄给函数),子进程则调用GetStdHandle()取得管道的读句柄,将该句柄传入ReadFile()后从管道读取数据。
假设是父进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道的写入句柄,并调用WriteFile()将数据写入到管道。然后,父进程调用ReadFile()从管道读取出数据(传递管道读句柄给函数)。
在用WriteFile()函数向管道写入数据时,仅仅有在向管道写完指定字节的数据后或是在有发生错误时函数才会返回。如管道缓冲已满而数据还没有写完,WriteFile()将要等到还有一进程对管道中数据读取以释放出很多其它可用空间后才可以返回。管道server在调用CreatePipe()创建管道时以參数nSize对管道的缓冲大小作了设定。
匿名管道并不支持异步读、写操作,这也就意味着不能在匿名管道中使用ReadFileEx()和WriteFileEx(),并且ReadFile()和WriteFile()中的lpOverLapped參数也将被忽略。匿名管道将在读、写句柄都被关闭后退出,也能够在进程中调用CloseHandle()函数来关闭此句柄。

转载于:https://www.cnblogs.com/mfrbuaa/p/4486758.html

管道(Pipe)/createPipe相关推荐

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

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

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

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

  3. 无名管道pipe使用方法

    有名管道pipe函数:int pipe(int filedes[2]);  下面程序通过创建进程,父进程写入数据,子进程读取数据,从管道中读取数据. #include <stdio.h> ...

  4. [转]Angular2 使用管道Pipe以及自定义管道格式数据

    本文转自:https://www.pocketdigi.com/20170209/1563.html 管道(Pipe)可以根据开发者的意愿将数据格式化,还可以多个管道串联. 纯管道(Pure Pipe ...

  5. python 归纳 (二二)_多进程数据共享和同步_管道Pipe

    # -*- coding: utf-8 -*- """ 多进程数据共享 管道Pipe逻辑:2个进程,各自发送数据到管道,对方从管道中取到数据总结:1.只适合两个进程2.r ...

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

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

  7. python subprocess pipe_python类库31[进程subprocess与管道pipe]

    修改自: 原文 : Working with Python subprocess - Shells, Processes, Streams, Pipes, Redirects and More 一 程 ...

  8. linux管道只能运输参数吗,oeasy教您玩转 linux 010212 管道 pipe

    原标题:oeasy教您玩转 linux 010212 管道 pipe 我们来回顾一下

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

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

最新文章

  1. modifiers在JAVA中_Java Modifier.classModifiers方法代碼示例
  2. java gettickcount_linux上的GetTickCount函数
  3. ThreadLocalRandom 安全吗
  4. javascript入门·简单运算和数据类型转换
  5. March 2007 CTP Linq 的一些改变
  6. 如何使用 Laravel Collections 类编写神级代码
  7. Linux命令必知必会
  8. python,时间加减,时间计算,时间格式化,时间提取汇总
  9. c语言斐波那契数列_剑指Offer-10-I.斐波那契数列
  10. PAMIE:点击网页中的弹出窗口的按钮
  11. Python使用for循环打印直角三角形
  12. PHP Web Shell in browser
  13. 加密 CryptoJS DES
  14. 怎样屏蔽掉“网页对话框”
  15. 【转帖】八类网线与六类网线有什么区别呢?
  16. 毕业论文格式|自制word模板 |.domt | word格式模版
  17. 区块链会计案例_或许你也曾想过:区块链正在改变着会计行业!
  18. 数学方法生成六位随机数
  19. 不重启JVM,对未添加日志的方法添加日志!
  20. java session logout_Spring Session Logout

热门文章

  1. 多用户操作git“远程仓库“(本地)
  2. php石头剪刀布五局三胜,求程序,下面是剪刀石头布的程序,谁能帮忙改成能选择三局两胜,五局三胜……的?能成功运行的加分...
  3. d3 tip mysql_mysql
  4. php min命令,php min函数怎么用?
  5. (多线程)leetcode1195. 交替打印字符串 最简单解法一个变量搞定
  6. C/C++中static的用法全局变量与局部变量
  7. 《Python Cookbook 3rd》笔记(3.4):二、八、十六进制整数
  8. python语句分为_python以什么划分语句块
  9. C++生成指定范围内的随机数
  10. c++面向对象高级编程 学习十 function-like classes