美文网首页
管道是如进行进程间通信的

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

作者: 吃掉夏天的怪物 | 来源:发表于2021-09-21 15:22 被阅读0次

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

匿名管道和命名管道都是内核的文件

匿名管道是Linux系统提供的一个系统函数,可以通过这个函数来进行管道的使用

//命令行中 | 也起到管道的作用
a|b

管道背后的原理就是两个文件描述符号,一个管道相当于一个队列。有管道的头和尾,往管道的尾里去写东西,从管道的头里去读东西。这个队列如何控制头跟尾的呢,就是两个文件描述符,来表示管道的两端,读取端:fd[0]、写入端:fd[1]
在一个进程里创建一个匿名管道之后呢,大概如下图所示:

通过pipe函数创建了一个管道
创建了一份管道相当于创建了一份缓存,因为LINUX中是一切皆文件的。

如何让创建的管道在两个进程中用,fork()子进程,会复制父进程文件描述的结构体,fd数组也会复制一份。文件描述符相当于指针,子进程的复制相当于浅拷贝。
由于管道只能一端写入另一端读出。所以通常父进程只保留读取的fd,而子进程只保留写入的fd。


父进程和子进程各关闭一个fd描述符。

在shell里的命令,a和b是平级进程shell首先创建一个子进程a然后在shell和a之间创建一个管道,然后fork出来了一个a这样呢shell与a有通信关系的,之后shell保留读取端,a保留写入端。之后shell再创建一个b,这样shell、a、b都指向了同一个管道, 这样shell再把它的fd0和fd1都给关掉,这样fork出来的b

命名管道
实现原理和匿名管道差不多,本质上都是内核的文件。命名管道会写到磁盘文件里,不相关的进程也能一头写一头读。

笔记

相关文章

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

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

  • Linux 进程间通信

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

  • PHP进程间通信--消息队列

    前面介绍了怎么通过消息管道(有名消息管道)进行进程间通信,下面介绍如何通过消息队列实现进程间通信。 首先我们来看一...

  • 进程间通信

    进程间通信 不同的进程间进行数据的传输 进程间通信方式 文件 不推荐,文件和磁盘交互慢,数据不安全 管道 在内存中...

  • 进程通信方式

    1、管道与有名管道管道可用于具有亲缘关系的父子进程间通信,有名管道除了具有管道的特点外,还允许无亲缘关系的进程进行...

  • unix进程间通信方式(IPC)

    管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 命名...

  • 零散的小知识记录(待补充和修改)

    Android跨进程通信:Binder,socket/管道/消息队列,共享内存; linux进程间通信:管道,Bi...

  • 20.2、python进程间通信——队列和管道

    进程间通信——队列和管道(multiprocess.Queue、multiprocess.Pipe) 进程间通信 ...

  • Linux进程间通信

    Linux进程间通信的概念 linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named p...

  • Linux系统编程:Inter-Process Communic

    一、IPC——进程间通信 Linux系统提供的进程间通信的手段: 消息传递类:信号 匿名管道 命名管道 socke...

网友评论

      本文标题:管道是如进行进程间通信的

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