首页 > 系统相关 >linux 管道

linux 管道

时间:2022-12-23 13:34:01浏览次数:43  
标签:文件 管道 线程 内核 数据量 linux 操作

linux进程或者线程间通信的一种方式

管道本质上就是一个文件,前面的进程以写方式打开文件,后面的进程以读方式打开。这样前面写完后面读,于是就实现了通信

linux的设计思路就是一切皆文件,有着众多的文件系统

管道作为文件的存储地址是内存,所以可以认为Linux上的管道就是一个操作方式为文件的内存缓冲区。

管道的通信在同一时间是单向的,也就是一种半双工的形式,当一组数据被传入的时候,只有等到调用这组数据后才能再次传入。

在管道中没有数据的情况下,对管道的读操作会阻塞,直到管道内有数据为止。当一次写的数据量不超过管道容量的时候,对管道的写操作一般不会阻塞,直接将要写的数据写入管道缓冲区即可。

当然写操作也不会再所有情况下都不阻塞。这里我们要先来了解一下管道的内核实现。上文说过,管道实际上就是内核控制的一个内存缓冲区,既然是缓冲区,就有容量上限。我们把管道一次最多可以缓存的数据量大小叫做PIPESIZE。内核在处理管道数据的时候,底层也要调用类似read和write这样的方法进行数据拷贝,这种内核操作每次可以操作的数据量也是有限的,一般的操作长度为一个page,即默认为4k字节。我们把每次可以操作的数据量长度叫做PIPEBUF。POSIX标准中,对PIPEBUF有长度限制,要求其最小长度不得低于512字节。PIPEBUF的作用是,内核在处理管道的时候,如果每次读写操作的数据长度不大于PIPEBUF时,保证其操作是原子的。而PIPESIZE的影响是,大于其长度的写操作会被阻塞,直到当前管道中的数据被读取为止。

Linux上的管道分两种类型:

  1. 匿名管道
  2. 命名管道

匿名管道只能在父子进程或者父子线程之间使用,因为这些进程或者线程有着相同的内存信息,因此管道信息也在其中保存,可以用来进行通信,使用pipe()创建

使用pipe()系统调用可以创建一个匿名管道,这个系统调用的原型为:

#include <unistd.h>
​
int pipe(int pipefd[2]);

这个方法将会创建出两个文件描述符,可以使用pipefd这个数组来引用这两个描述符进行文件操作。pipefd[0]是读方式打开,作为管道的读描述符。pipefd[1]是写方式打开,作为管道的写描述符。从管道写端写入的数据会被内核缓存直到有人从另一端读取为止

有名管道相当于是一个文件,mkfifo创建,任何的进程或线程只要有这个文件名就可以进行操作

 

标签:文件,管道,线程,内核,数据量,linux,操作
From: https://www.cnblogs.com/uestc-du/p/17000479.html

相关文章

  • [ Linux ] 死锁以及如何避免死锁
    1.什么是死锁?死锁死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待的状态。2.模拟死锁情况我们使用多......
  • 文件目录结构、文件命名规范、文件系统结构、linux应用程序的组成、绝对路径和相对路
    文件目录结构文件和目录被组织成一颗倒置的树状结构文件系统从根开始,“/”文件名称严格区分大小写隐藏文件以"."开头路径的分隔符为"/"文件命名规范文件字符最长为255个字符......
  • Linux服务器安装python3.7环境
    安装python3.7依赖yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-......
  • linux 命令使用5--mpstat
    简介:    mpstat是MultiprocessorStatistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看......
  • Linux常用命令
    常用命令书写命令要用空格分开,一个或多个都可以ping是命令符www.baidu是参数如果不知道要用的命令可以借助Linux命令大全help找命令的帮助whereis查询命令的位置file查看文......
  • Linux 常用命令总结
    Linux常用命令总结作者:Grey原文地址:博客园:Linux常用命令总结CSDN:Linux常用命令总结本文基于的Linux环境是CentOS7,主要是日常使用的一些命令,持续更新中……......
  • 解决RockyLinux和Centos Stream 9中firefox无法播放HTML视频问题
    如题在测试两种centos后续系统时,发现firefox无法播放HTML视频问题。经过一番折腾找到了解决的办法,具体解决如下:首先下载VLC$sudoyuminstallvlc而后重启浏览器就可......
  • Linux系统入门-Shell命令
    linux中的shellLinux中的shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息。shell在Linux中的存在形式由于Linux不同于Win......
  • Linux: NetworkManager
     permissions:允许非root用户控制网络grantpermissionnmclicmodifyconvoluteconnection.permissions'user:intrinsic,gdm' disablepolkit/etc/NetworkM......
  • 分享巧记Linux命令的方法
    最近有些学弟经常私信问我说,他们自己是Linux方面的小白,对于Linux的命令了解十分的少,虽然每次跟着我推荐的学习视频教程可以进行操作,但是离开了视频,就又是两眼抓瞎,什么也想......