39 | 管道

作者: AndyWei123 | 来源:发表于2020-05-16 17:08 被阅读0次
  • 匿名管道:其实就是内核里面的一串缓存
    • 创建管道:返回了两个文件描述符,这表示管道的两端,一个是管道的读取端描述符 fd[0],另一个是管道的写入端描述符 fd[1]。

进程间内存无法共享,但是文件可以。可以利用这点进行文件到进程先虚拟内存映射,然后操作文件。
先通过fork copy父进程的 task_struct ,然后就copy了 files_struct,也就是有了这俩个fd到引用。
如图先copy 引用


image.png

第二步将,fd[0] 和子进程到 fd[1] 引用删除,因为管道只能 一端输入一端输出。


image.png
通过Shell 的 | 创建的匿名管道因为两个进程没有父子关系,都是shell创建的
image.png
接下来要将A的标准输出和B的标准输入衔接到上面的管道的输入输出:
  • 在 A 进程中,写入端可以做这样的操作:dup2(fd[1],STDOUT_FILENO),将 STDOUT_FILENO(也即第一项)不再指向标准输出,而是指向创建的管道文件,那么以后往标准输出写入的任何东西,都会写入管道文件。
  • 在 B 进程中,读取端可以做这样的操作,dup2(fd[0],STDIN_FILENO),将 STDIN_FILENO 也即第零项不再指向标准输入,而是指向创建的管道文件,那么以后从标准输入读取的任何东西,都来自于管道文件。
  • 命名管道:
image.png

相关文章

  • 39 | 管道

    匿名管道:其实就是内核里面的一串缓存创建管道:返回了两个文件描述符,这表示管道的两端,一个是管道的读取端描述符 f...

  • 学习一建总结

    一、学习 1.打字苹果游戏,39分钟。 2.管道章节复习,60分钟。 3.管道冲洗看视频,14分钟。 4.管道章节...

  • 39. channel管道

    channel 是有类型的管道,channel 的操作符是 <- ,可以用来发送或接收值。 管道的使用也是必须创建...

  • JS 管道操作符

    最近看到 tc39 的一个提案,叫管道操作符(Pipeline Operator),是一个 stage 1 的提案...

  • 如何在 JavaScript 中使用管道(管道运算符)?

    管道运算符(|>)在函数式编程中很常见,但他目前还没内置在 JavaScript 中,正处于 TC39 审议的草案...

  • 工业管道工程施工程序

    管道分类与分级 工业管道按压力分级 管道的组成 管道由管道组成件和管道支承件组成 管道组件管道组成件是用于连接或装...

  • 管道基础

    ##管道基础 #通信分类:只写单工管道、只读单工管道、半双工管道(单向读写)、全双工管道(两个半双工管道拼接) 类...

  • Linux 进程间通信

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

  • 隧道安全逃生管道最新成果

    新型高分子隧道安全逃生管道分别有高分子逃生管道、新型隧道逃生管道、轻型逃生管道、悬挂式隧道逃生管道、防腐逃生管道、...

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

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

网友评论

    本文标题:39 | 管道

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