欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

理解Linux C语言中的管道(Pipe):双向与半双工通信机制简介

最编程 2024-07-20 11:12:31
...

1 管道pipe

1.1 管道pipe概念
管道是一种最基本的IPC机制,作用于有血缘关系的进程之间(pipe管道只能用于父子、兄弟进程(有共同祖先)间通信。该问题后来使用fifo有名管道解决。),完成数据传递。调用pipe系统函数即可创建一个管道。

1.2 管道pipe的特质

  • 1) 其本质是一个伪文件(实为内核缓冲区) 。linux分为八大文件。占用磁盘的3种文件为普通文件,目录,软连接(ln -s)。其余5个为伪文件也叫块设备。分为字符设备,块设备(和前一个意思不一样),管道,套接字,和未知文件。
  • 2)由两个文件描述符引用,一个表示读端,一个表示写端。
  • 3) 规定数据从管道的写端流入管道,从读端流出。

1.3 管道的原理

  • 1)管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。

1.4 管道的局限性

  • 1)数据自己读不能自己写。
  • 2)数据一旦被读走,便不在管道中存在,不可反复读取。
  • 3)由于管道采用双向半双工通信方式。因此,数据只能在一个方向上流动。即一个进程只能读,另一个进程只能写,或者反过来。
  • 4)只能在有公共祖先的进程间使用管道。

2 双向半双工概念

常见的通信方式有,单工通信、半双工通信、全双工通信。
这里给出一个双向半双工的图。
在这里插入图片描述

  • 1)单向半双工:即上面的箭头只能有一个。要么向左要么向右。例如我们的电视机和遥控,一个只能发送信号,一个只能接收信号,方向是担心并且是半双工工作。
  • 2)双向半双工“即上图。可以双向,但是都只能干一半的工作。一个进程要么只能是读,要么只能是写。例如我们的双向半双工的对讲机,一个人在讲话的时候,另一个人只能听着。
  • 3)双向全双工:即上图再加多一个缓冲区,每一个缓冲区都用于两个client的读写。例如我们的微信语音,可以同时说话。