美文网首页
[C++] 匿名管道的理解与实现

[C++] 匿名管道的理解与实现

作者: 极速蜗牛2020 | 来源:发表于2023-04-08 16:29 被阅读0次

什么是匿名管道?

匿名管道用于进程之间通信,且仅限于本地父子进程之间通信,结构简单,类似于一根水管,一端进水另一端出水(单工)。相对于命名管道,其占用小实现简单,在特定情况下,比如实现两围棋引擎本地对战可以使用匿名管道。

怎样实现匿名管道双向通信?

由于匿名管道是单工的,所以为实现父子进程双向通信需要创建两根管道,并由子进程继承一根管道的读句柄和另一根管道的写句柄。

如何理解匿名管道的双向通信?
管道相当于一段内存,一个进程输入,一个进程读出。

在进程通信时一般会产生进程同步问题(进程同步讲解请见操作系统类书籍):父子进程各自均具有读写功能,在管道为空时,相应读进程应该被阻塞起来,直到管道被写入为止才被唤醒。

这种空管道不允许读的特性应当加一个锁,但匿名管道自带了这种功能,所以不需要对读写进行限制,其能自动阻塞。

实现双向通信
在父进程中创建两个匿名管道。此时父进程共有六个句柄Read1,Write1,Read2,Write2,标准输入输出句柄。


image.png

由图所示,标准输入输出句柄用于在Dos窗口的输入和输出。

然后我们需要让创建的子进程继承Write1句柄和Read2句柄。


image.png

相关资料

相关文章

  • Linux 进程间通信

    进程间通信 一 进程间通信 -- 管道 mkfifo test 创建管道文件 匿名管道和命名管道:匿名管道:匿名管...

  • Linux下进程通信 匿名管道pipe

    匿名管道(pipe): 匿名管道(pipe)是Linux支持的最初Unix IPC形式之一 匿名管道进行父子进程之...

  • Linux进程间通信 -- 匿名管道和FIFO

    Linux进程间通信 -- 匿名管道和FIFO 匿名管道 管道包括三种: 匿名管道pipe. 特点:一是单工(单项...

  • 6.进程间通信

    进程间通信通常有几种方式。 1.管道分为匿名管道、命名管道。匿名管道就是命令行中常用的 xxx | xxx。管道以...

  • Linux pipe 管道

    引言 pipe是Linux系统跨进程通信的一种方式。管道分为匿名管道和有名管道。这里我们说的是匿名管道。作用于有血...

  • 管道是如进行进程间通信的

    管道是如何进行进程间通信的 匿名管道和命名管道都是内核的文件 匿名管道是Linux系统提供的一个系统函数,可以通过...

  • Linux-C-day-2-进程通过--管道通信

    管道通信 进程间管道通信方式可以通过man 7 pipe来查看; 匿名管道 单工管道 打开管道:使用popen()...

  • windows 匿名管道

    1、匿名管道是进程间通信的一种技术。windows提供的匿名管道技术,不能够跨网络跨机器,只能在同一机器上不同进程...

  • Linux系统编程—管道

    ▋****1. 管道的概念 管道,又名「无名管理」,或「匿名管道」,管道是一种非常基本,也是使用非常频繁的IPC方...

  • Linux系统编程—有名管道

    ▋****1. 管道的概念 管道,又名「无名管理」,或「匿名管道」,管道是一种非常基本,也是使用非常频繁的IPC方...

网友评论

      本文标题:[C++] 匿名管道的理解与实现

      本文链接:https://www.haomeiwen.com/subject/jicvddtx.html