管道(Pipe)/createPipe

管道(Pipe)/createPipe

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

 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()函数来关闭此句柄。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118215.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Windows 更新错误 8024401C -解决方法之一

    Windows 更新错误 8024401C -解决方法之一1.  按“Windows+X”打开命令提示符管理员,输入“netstopwuauserv”。2.  打开C:\Windows,重命名SoftwareDistribution文件夹为SDold。3.  按“Windows+X”打开命令提示符管理员,输入“netstartwuauserv”。不一定管用。。。。

  • Error: Unable to find git in your PATH.

    Error: Unable to find git in your PATH.

  • idea2020.2.1激活码【2021免费激活】

    (idea2020.2.1激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html3MRUAPM31O-eyJsaWNlbnNlSW…

  • linux 中了挖矿病毒

    linux 中了挖矿病毒文章目录中毒特征磁盘cpu跑满100%如何处理反复发作中毒特征磁盘cpu跑满100%如何处理电脑中了挖矿病毒ps-aux|grepkinsingroot194470.01.811917235084?Sl4月150:04/var/tmp/kinsingroot272470.00.0112728…

  • 安卓编程用什么软件_手机上能安装PLC编程软件吗?为什么?[通俗易懂]

    安卓编程用什么软件_手机上能安装PLC编程软件吗?为什么?[通俗易懂]时常会有初学者来问,手机是否可以安装PLC编程软件?在这里明确的告诉大家,手机不可以安装PLC编程软件。手机不支持安装PLC编程软件,因为PLC编程软件是你所用的品牌厂家开发出来的,如三菱PLC、西门子PLC、欧姆龙PLC等,厂家开发出软件并上线,供我们下载安装,我们才有的用,目前没有任何厂家有开发手机版的PLC编程软件。其实想用手机版的PLC编程软件,就目前来看,非常的不现实,存在一些问题,如安…

  • 详解 & 0xff 的作用

    详解 & 0xff 的作用首先我们要都知道,&表示按位与,只有两个位同时为1,才能得到1,0x代表16进制数,0xff表示的数二进制11111111占一个字节.和其进行&操作的数,最低8位,不会发生变化.下面着重来说说&0xff都有哪些应用:1.只是为了取得低八位通常配合移位操作符>>使用例如:javasocket通信中基于长度的成帧方法中,如果发送的信息长度小于65…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号