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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2022年最新前端面试题,持续更新「建议收藏」

    2022年最新前端面试题,持续更新「建议收藏」2022年最新前端面试题适合初/中级前端开发工程师

    2022年10月17日
    1
  • 一致性哈希算法及其实现

    一致性哈希算法及其实现一致性哈希算法及其实现(ConsistentHashing)一,一致性哈希算法的原理1,一致性哈希算法诞生的背景   技术和业务是相互推动,共同前进的。一致性哈希算法的产生也源于业务的需求。随着业务的增长,一台单机已经不能满足业务的需要,分布式架构应运而生。分布式环境下,多台机器需要协同作业,如果保证数据在分布式环境下的一致性,就成为了亟待解决的问题。一致性哈希算法,就是为了解决多台…

    2022年7月27日
    7
  • allure报告打开为loading状态「建议收藏」

    allure报告打开为loading状态「建议收藏」生成测试报告命令python3-mpytest–alluredir=../unit/allure_resulttest_case.pyalluregenerate./unit/allure_result-o./unit/allure_report直接在pycharm中右击allure报告中的index.html,使用如下图方式打开的allure报告打开一切顺利!!!在jenkins中把报告打包通过附件发送到邮件,然后在邮件中下载解压打开就会出现如下情况二、问

    2022年7月26日
    38
  • SpringBoot调用第三方接口[通俗易懂]

    SpringBoot调用第三方接口[通俗易懂]Spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接,我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。RestTemplate默认依赖JDK提供http连接的能力(HttpURLConnect…

    2022年6月10日
    138
  • 遍历map的几种方法?_hashmap如何遍历

    遍历map的几种方法?_hashmap如何遍历#先往map加入几个数据Map<Integer,String>map=newHashMap<>();map.put(1,”美好的周一”);map.put(2,”美好的周二”);map.put(3,”美好的周三”);方法一:普通的foreach循环,使用keySet()方法,遍历keyfor(Integerkey:map.keySet()){System.out.println(“key:”+key+

    2022年9月21日
    1
  • IntelliJ IDEA安装操作步骤

    IntelliJ IDEA安装操作步骤一、下载安装1、打开官网:http://www.jetbrains.com/idea/,点击页面中的“DOWNLOAD”2、根据自己的需要选择下载的IntelliJIDEA版本,此处我的电脑是Windows764位的,我选择的是Community(社区版)3、双击下载好的安装包4、点击“Next”5、选择安装位置,然后点击“Next”6、勾选安装选型,然后点击“Next…

    2022年6月29日
    93

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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