当前位置: 首页 > news >正文

【Linux】管道

管道命令

#include <unistd.h>
int pipe(int pipefd[2]);
在Linux中,管道(pipe)的返回值是一个整数数组,包含两个文件描述符。这两个文件描述符分别代表管道的读端和写端。
当成功创建一个管道时,pipe() 系统调用会返回0,并将文件描述符存储在提供的数组中。文件描述符是非负整数,通常是从3开始递增的。文件描述符中,索引为0的表示标准输入(stdin),索引为1的表示标准输出(stdout),索引为2的表示标准错误输出(stderr)。
例如,如果使用以下代码创建了一个管道:
在这里插入图片描述

若创建成功,ret 的值将为0,fd 数组的第一个元素 fd[0] 将为读端的文件描述符,fd 数组的第二个元素 fd[1] 将为写端的文件描述符。
需要注意的是,创建管道失败时,pipe() 系统调用会返回-1,并设置适当的错误码。在这种情况下,通过检查错误码可以确定具体的失败原因。

管道介绍

管道是一种单向数据流,它有一个读端和一个写端。
当父进程创建一个管道后,它会得到两个文件描述符,一个用于读取管道数据,一个用于写入管道数据。接着,父进程会创建一个子进程。子进程继承了父进程的文件描述符。
在这里插入图片描述

在Linux中,管道被称为半双工(half-duplex),这意味着它只能进行单向数据流的传输。具体而言,管道可以提供两个方向的数据流,一个是从写端到读端的方向,另一个是从读端到写端的方向。但是,不能同时在这两个方向上进行读写操作。
当父进程创建一个管道后,可以通过写端向管道中写入数据,然后通过读端从管道中读取数据。但是,父进程不能同时使用同一个管道进行读写操作。同样,子进程也可以使用同一个管道进行读写操作,但是也不能同时进行。

管道的特点

  1. 管道是单向同行的,也叫半双工
  2. 管道的本质是文件,因为fd的生命周期随进程,管道的生命周期也是随进程的
  3. 管道通信,通常用来进行具有“血缘”关系的进程,进行进程间通信。常用于父子通信。
  4. 在管道通信中,写入的次数和读取的次数,不是严格匹配的。
    在这里插入图片描述
    具有一定的协同能力,让read和write能按照一定的步骤进行通信

管道的四种场景

  1. 如果我们read读取完毕了所有管道数据,如果读端没有写入,那么写端就会一直等待
  2. 如果我们write端写满后,我们就会停止写入,直到读端读取数据后才可以正常写入
  3. 如果我们关闭了写端,当读端将写端最后的数据读取完再度取是就会返回0,表示已经读到了文件结尾。
  4. 如果写端一直写,读端关闭那么系统将直接通过kill -13进行终止

匿名管道的退出

因为当管道的读端关闭后,写端也会随之关闭,当我们让父进程进程读,子进程进行写时,我们关闭写端后,子进程是否会正常退出,我们来认识分析一下
在这里插入图片描述

命名管道的退出

在这里插入图片描述

mkfifo用于创建一个FIFO(命名管道)文件。FIFO文件在使用后会保留在文件系统中,不会自动删除。
在这里插入图片描述

如果想要自动删除需要用到unlink命令在调用unlink函数后,它会尝试删除指定的文件。如果成功删除文件,unlink将返回0,否则返回-1,并且此时可以通过errno变量获取错误信息。
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/162046.html

相关文章:

  • postgre 12.11单实例安装文档
  • 使用LightPicture开源搭建私人图床:详细教程及远程访问配置方法
  • 基于视觉重定位的室内AR导航项目思路(1):最初的项目思路(SLAM)
  • 小白学go基础05-变量声明形式
  • 高可用Kuberbetes部署Prometheus + Grafana
  • ardupilot 安装gcc-arm-none-eabi编译工具
  • ORACLE集群管理-19C RAC重新配置IPV6
  • Mybatis实体类属性与数据库字段的对应关系
  • Unity(三) Shader着色器初探
  • 苹果电脑要安装杀毒软件吗?mac用什么杀毒软件好?
  • MySQL——索引
  • 110. 平衡二叉树
  • 遗忘因子递推最小二乘参数估计(FFRLS)
  • 【redis进阶】基础知识简要回顾
  • HTML5-3-表格
  • Spring Boot + Vue的前后端项目结构及联调查询
  • Transformer貌似也是可以使用state递归解码和训练的
  • 振弦采集仪应用地铁隧道安全监测详细解决方案
  • 2023 IntelliJ IDEA下载、安装教程, 附详细图解
  • 波卡生态重要动态一览:w3ndi 推出,首尔、新加坡、里斯本活动接踵而至
  • 成都瀚网科技有限公司:抖音商家怎么免费入驻?
  • vue Router从入门到精通
  • 【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理(删除填充插值,数据类型转换,去重,连接与合并)
  • phpstudy本地快速搭建网站,并外网访问【无公网IP】
  • WebSocket的那些事(5-Spring STOMP支持之连接外部消息代理)
  • 【数据结构】单链表详解
  • dql的执行顺序
  • java的动态代理如何实现
  • Java--日志管理
  • Pygame中Sprite类的使用2