管道(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 以太网用户侧接口(以太网协议转换方案)

    以太网接口示意图如下图1:以太网接口 如果您的职业生涯大部分时间都在从事PCB设计,并且您在计算机接口的布局和布线方面有经验,那么您就知道一件事是正确的:在器件应用说明中会有一些推荐的设计建议,并不是这些建议总是错误的,而是这些建议很容易断章取义。一位同事向我提出的一项建议是,在离散磁铁和连接器之间布线时,在RJ45连接器下方使用接地层。一些应用说明建议将系统接地覆盖RJ45连接器下方,一些应用说明建议将接地平面拆分为系统和机箱部分,以提供更强的隔离。应用说明中的一些建议指出,PHY、磁体和/或

    2022年4月15日
    181
  • 从零开始写一个发送h264的rtsp服务器(上)「建议收藏」

    从零开始写一个发送h264的rtsp服务器(上)

    2022年3月13日
    103
  • Mysql锁死解决「建议收藏」

    Mysql锁死解决「建议收藏」经常遇到mysql锁死,如alterxx语句就经常锁死数据表怎么解决?1.showprocesslist;可以看到有Waitingfortablemetadatalock字眼;如果有其他类似字眼可以解决掉冲突的进程命令:killpidpid就是图片第一列的id,如果还是无法解决且看第二条2.select*frominformation_schema.innodb_trx;此条即查到未结束的事务,可以酌情杀死冲突事务一般都可解决锁死。如未解决可谨慎

    2022年5月18日
    53
  • Mybatis 拦截器简述[通俗易懂]

    Mybatis 拦截器简述[通俗易懂]一、Mybatis拦截器可以做到什么慢查询,SQL异常监控数据预处理(加密,自生成字段)数据脱敏数据权限过滤二、MybatisSQL执行流程这里重点关注InterceptorChain,它会为Mybatis的四大对象织入代理。我们自定义生成的拦截器也将通过InterceptorChain织入。三、Mybatis拦截器使用方式拦截粒度为方法签名自定义拦截器需使用@Intercepts和@Signature注解来指定拦截类和方法。例如拦截Exceptor的query和update

    2025年10月9日
    3
  • 机器学习之Python — Sklearn库简介

    机器学习之Python — Sklearn库简介文章目录机器学习之Python—Sklearn库简介1Sklearn简介2Sklearn安装3Sklearndatasets4Sklearn通用学习模式5Sklearn数据预处理–标准化6Sklearn交叉验证7总结参考资料机器学习之Python—Sklearn库简介1Sklearn简介Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常…

    2022年10月11日
    2
  • vue中如何关闭eslint「建议收藏」

    vue中如何关闭eslint「建议收藏」1.在目录中新建vue.config.js2.在新建文件中输入module.exports={lintOnSave:false}就可以关闭啦~

    2022年10月8日
    2

发表回复

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

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