【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.rhkb.cn/news/127000.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五)Stable Diffussion使用教程:文生图之高清修复

上一篇我们说到图生图,这一篇来说说高清修复。 上一篇我们通过一个例子实现了图生图的功能,使用一张图片生成了另一种风格的图片。 然而,我们生成的图片质量不尽如人意。 虽然我们之前也提到设置分辨率、精炼提示词去提升画面质量等等,但是实际用下来发现,分辨率拉得太…

LLM推理优化技术综述:KVCache、PageAttention、FlashAttention、MQA、GQA

LLM推理优化技术综述&#xff1a;KVCache、PageAttention、FlashAttention、MQA、GQA 随着大模型被越来越多的应用到不同的领域&#xff0c;随之而来的问题是应用过程中的推理优化问题&#xff0c;针对LLM推理性能优化有一些新的方向&#xff0c;最近一直在学习和研究&#xf…

苍穹外卖技术栈

重难点详解 1、定义全局异常 2、ThreadLocal ThreadLocal 并不是一个Thread&#xff0c;而是Thread的一个局部变量ThreadLocal 为每一个线程提供独立的存储空间&#xff0c;具有线程隔离的效果&#xff0c;只有在线程内才能取到值&#xff0c;线程外则不能访问 public void …

OpenCV项目开发实战--实现面部情绪识别对情绪进行识别和分类及详细讲解及完整代码实现

文末提供免费的完整代码下载链接 面部情绪识别(FER)是指根据面部表情对人类情绪进行识别和分类的过程。通过分析面部特征和模式,机器可以对一个人的情绪状态做出有根据的猜测。面部识别的这个子领域是高度跨学科的,借鉴了计算机视觉、机器学习和心理学的见解。 在这篇研究…

JavaScript基础知识09——数据类型

哈喽&#xff0c;大家好啊&#xff0c;这里是雷工笔记&#xff0c;我是雷工。 数据类型比较常见&#xff0c;无论是对程序员&#xff0c;还是电气工程师来说&#xff0c;都再熟悉不过了&#xff0c;这里跟着教程了解一下&#xff0c;主要看跟自己以往在其他PLC&#xff0c;C#&a…

Windows环境下Elasticsearch相关软件安装

Windows环境下Elasticsearch相关软件安装 本文将介绍在 windows 环境下安装 Elasticsearch 相关的软件。 1、安装Elasticsearch 1.1 安装jdk ElasticSearch是基于lucence开发的&#xff0c;也就是运行需要java jdk支持&#xff0c;所以要先安装JAVA环境。 由于ElasticSear…

基于SSM的校园美食交流系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

算法 数据结构 递归冒泡算法 java冒泡算法 优化递归冒泡 数据结构(九)

使用递归算法实现冒泡&#xff1a; package com.nami.algorithm.study.day06;import java.util.Arrays;/*** beyond u self and trust u self.** Author: lbc* Date: 2023-09-05 15:36* email: 594599620qq.com* Description: keep coding*/ public class BubbleSort2 {// p…

2023 年最新Java 毕业设计选题题目参考,500道 Java 毕业设计题目,值得收藏

大家好&#xff0c;我是程序员徐师兄&#xff0c;最近有很多同学咨询&#xff0c;说毕业设计了&#xff0c;不知道选怎么题目好&#xff0c;有哪些是想需要注意的。 确实毕设选题实际上对很多同学来说一个大坑&#xff0c; 每年挖坑给自己跳的人太多太多&#xff0c;选题选得好…

目标检测评估指标mAP:从Precision,Recall,到AP50-95

1. TP, FP, FN, TN True Positive 满足以下三个条件被看做是TP 1. 置信度大于阈值&#xff08;类别有阈值&#xff0c;IoU判断这个bouding box是否合适也有阈值&#xff09; 2. 预测类型与标签类型相匹配&#xff08;类别预测对了&#xff09; 3. 预测的Bouding Box和Ground …

支付宝沙箱调用错误

支付宝沙箱调用参数就三个APPID&#xff0c;用户私钥&#xff0c;支付宝公钥&#xff0c; 发送请求需要的配置 alipay: app_id: 2021000122636644 merchant_private_key: 用户私钥 alipay_public_key: 支付宝公钥 sign_type: RSA2 charset: utf-8 gatewayUrl: https://openap…

5分钟让你实现一个Python+Selenium的自动化测试框架(超详细~)

什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE&#xff1a;Firefox的…

C# 参数名加冒号,可以打乱参数顺序

今天看到Python有这种语法&#xff0c;参数名后面跟着等号写参数&#xff0c;联想到前几天用到的Serilog&#xff0c;好像有个参数名加冒号的写法&#xff0c;搜索了一下&#xff0c;果真有这种用法。 函数特别大的时候&#xff0c;用这种方法很直观&#xff0c;而且参数可以打…

2023开学礼中国海洋大学《乡村振兴战略下传统村落文化旅游设计》许少辉新海洋图书馆

2023开学礼中国海洋大学《乡村振兴战略下传统村落文化旅游设计》许少辉新海洋图书馆

虚拟机上部署K8S集群

虚拟机上部署K8S集群 安装VM Ware安装Docker安装K8S集群安装kubeadm使用kubeadm引导集群 安装VM Ware 参考&#xff1a;http://www.taodudu.cc/news/show-2034573.html?actiononClick 安装Docker 参考&#xff1a;https://www.yuque.com/leifengyang/oncloud/mbvigg#2ASxH …

Qt CMake 中国象棋程序实现

前驱课程 C自学精简实践教程 目录(必读) C数据结构与算法实现&#xff08;目录&#xff09; Qt 入门实战教程&#xff08;目录&#xff09; 项目初衷 为学习 Qt 的人提供一个合适的有一定难度的综合型练习项目。 在学会写代码之前&#xff0c;先看别人怎么写的代码。深入…

【Spring Cloud系列】 雪花算法原理及实现

【Spring Cloud系列】 雪花算法原理及实现 文章目录 【Spring Cloud系列】 雪花算法原理及实现一、概述二、生成ID规则部分硬性要求三、ID号生成系统可用性要求四、解决分布式ID通用方案4.1 UUID4.2 数据库自增主键4.3 基于Redis生成全局id策略 五、SnowFlake&#xff08;雪花算…

合宙Air724UG LuatOS-Air LVGL API控件-二维码(Qrcode)

二维码&#xff08;Qrcode&#xff09; 示例代码 qrcodelvgl.qrcode_create(lvgl.scr_act(),nil)lvgl.qrcode_set_txt(qrcode,"https://doc.openluat.com/home")lvgl.obj_set_size(qrcode,400,400)lvgl.obj_align(qrcode, nil, lvgl.ALIGN_CENTER, 0, 0)创建 可以通…

LP(六十九)智能文档助手升级

本文在笔者之前研发的大模型智能文档问答项目中&#xff0c;开发更进一步&#xff0c;支持多种类型文档和URL链接&#xff0c;支持多种大模型接入&#xff0c;且使用更方便、高效。 项目介绍 在文章NLP&#xff08;六十一&#xff09;使用Baichuan-13B-Chat模型构建智能文档中…

【山河送书第十期】:《Python 自动化办公应用大全》参与活动,送书两本!!

【山河送书第十期】&#xff1a;《Python 自动化办公应用大全》参与活动&#xff0c;送书两本&#xff01;&#xff01; 前言一书籍亮点二作者简介三内容简介四购买链接五参与方式六往期赠书回顾 前言 在过去的 5 年里&#xff0c;Python 已经 3 次获得 TIOBE 指数年度大奖&am…