当前位置: 首页 > 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变量获取错误信息。
在这里插入图片描述
在这里插入图片描述

相关文章:

【Linux】管道

管道命令 #include <unistd.h> int pipe(int pipefd[2]); 在Linux中&#xff0c;管道&#xff08;pipe&#xff09;的返回值是一个整数数组&#xff0c;包含两个文件描述符。这两个文件描述符分别代表管道的读端和写端。 当成功创建一个管道时&#xff0c;pipe() 系统调用…...

postgre 12.11单实例安装文档

一 下载 访问https://www.postgresql.org/download/&#xff0c;点击左侧的‘source进行下载&#xff0c;一般选择bz2的安装包。 二 安装 这里安装12.11版本的postgre&#xff0c;数据目录路径为/data/server/pgdata&#xff0c;端口为5432. 2.1 安装依赖包 #安装 yum in…...

使用LightPicture开源搭建私人图床:详细教程及远程访问配置方法

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进&#xff0c;功能也越来越多&#xff0c;而手机…...

基于视觉重定位的室内AR导航项目思路(1):最初的项目思路(SLAM)

文章目录 最初的项目思路&#xff08;SLAM&#xff09;&#xff1a;后文&#xff1a; 前情提要&#xff1a; 是第一次做项目的小白&#xff0c;文章内的资料介绍如有错误&#xff0c;请多包含&#xff01; 最初的项目思路&#xff08;SLAM&#xff09;&#xff1a; 由于我们在…...

小白学go基础05-变量声明形式

和Python、Ruby等动态脚本语言不同&#xff0c;Go语言沿袭了静态编译型语言的传统&#xff1a;使用变量之前需要先进行变量的声明。 变量声明形式使用决策流程图 这里大致列一下Go语言常见的变量声明形式&#xff1a; var a int32 var s string "hello" var i 13 …...

高可用Kuberbetes部署Prometheus + Grafana

概述 阅读官方文档部署部署Prometheus Grafana GitHub - prometheus-operator/kube-prometheus at release-0.10 环境 步骤 下周官方github仓库 git clone https://github.com/prometheus-operator/kube-prometheus.git git checkout release-0.10 进入工作目录 cd kube…...

ardupilot 安装gcc-arm-none-eabi编译工具

目录 文章目录 目录摘要0简介1.下载网站2.安装摘要 本节主要记录ardupilot使用的编译器安装过程。 0简介 gcc-arm-none-eabi是GNU项目下的软件,是一个面向裸机arm的编译器。那么说了这么多介绍,它都包含什么具体功能又怎么安装与使用呢,我们继续。 1.下载网站 gcc-arm-n…...

ORACLE集群管理-19C RAC重新配置IPV6

1 问题概述 数据库已经配置和IPV6和 IPV4双线协议&#xff0c;需要重新配置IPV6 2 关闭相关资源 1 root用户执行 ./srvctl stop scan_listener -i 1 ./srvctl stop scan ./srvctl stop listener -n orcldb1 ./srvctl stop listener -n orcldb2 ./srvctl stop vip -n orcldb…...

Mybatis实体类属性与数据库字段的对应关系

方法一:起别名 select t_id(数据库字段) tId(类的属性), ... , ...from 表名 方法二:开启驼峰映射 <!-- 开启驼峰映射 数据库 s_id java类 sId--><setting name"mapUnderscoreToCamelCase" value"true"/> 当java类中属性命名…...

Unity(三) Shader着色器初探

学习3D开发技术的时候无可避免的要接触到Shader&#xff0c;那么Shader是个什么概念呢&#xff1f;其实对于开发同事来说还是比较难理解的&#xff0c;一般来说Shader是服务于图形渲染的一类技术&#xff0c;开发人员可以通过其shader语言来自定义显卡渲染页面的算法&#xff0…...

苹果电脑要安装杀毒软件吗?mac用什么杀毒软件好?

对于这个问题让人很是纠结&#xff0c;Mac不需要杀毒这个理论一直都深入人心&#xff0c;Mac OS X权限管理特性可以防毒的说法也一直甚嚣尘上&#xff0c;很多小伙伴如我一样搞不清楚到底要不要安装杀毒软件。&#xff0c;毕竟当前个人信息安全泄露泛滥不穷的年代&#xff0c;我…...

MySQL——索引

索引在 MySQL 数据库中分三类&#xff1a; B 树索引Hash 索引全文索引 目的&#xff1a;在查询的时候提升效率 b树 参考&#xff1a;https://blog.csdn.net/qq_40649503/article/details/115799935 数据库索引&#xff0c;是数据库管理系统中一个排序的数据结构&#xf…...

110. 平衡二叉树

题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 递归法&#xff1a; 我的代码&#xff1a; *** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* Tree…...

遗忘因子递推最小二乘参数估计(FFRLS)

基于遗忘因子的最小二乘法电池参数辨识 最小二乘法是系统辨识中最常用的一种估算方法。为了克服最小二乘法存在”数据饱和”的问题&#xff0c;我们通常采用含有遗忘因子的递推最小二乘法(Forgetting Factor Recursive Least Square,FFRLS)算法进行电池模型的参数辨识。 1、二…...

【redis进阶】基础知识简要回顾

1. 常见功能介绍 聚合统计 使用list集合的差集、并集来统计 排序统计 SortedSet&#xff08;ZSet&#xff09;统计&#xff0c;再利用分页列出权重高的元素 二值状态统计 BitMap存储&#xff0c;获取并统计 SETBIT uid:sign:3000:202008 2 1 GETBIT uid:sign:3000:202008 2…...

HTML5-3-表格

文章目录 属性边框属性标题跨行和跨列单元格边距 HTML 表格由 <table> 标签来定义。 tr&#xff1a;tr 是 table row 的缩写&#xff0c;表示表格的一行。td&#xff1a;td 是 table data 的缩写&#xff0c;表示表格的数据单元格。th&#xff1a;th 是 table header的缩…...

Spring Boot + Vue的前后端项目结构及联调查询

Spring Boot Vue的前后端项目结构及联调查询 当你刚开始学习前后端开发时&#xff0c;可能会感到有些困惑和不知所措。下面是一些建议&#xff0c;希望能为你的学习之旅提供一些启示&#xff1a; 建立坚实的基础知识&#xff1a;学习前后端开发的第一步是建立坚实的基础知识。…...

Transformer貌似也是可以使用state递归解码和训练的

import paddle import numpy as npclass HeadLoss(paddle.nn.Layer):def __init__(self):super(HeadLoss, self).__init__()...

振弦采集仪应用地铁隧道安全监测详细解决方案

振弦采集仪应用地铁隧道安全监测详细解决方案 随着城市化进程的不断加快&#xff0c;地铁作为一种高效、便捷、环保的交通方式已经成为现代城市不可或缺的一部分。因此&#xff0c;对地铁的安全性也越来越重视&#xff0c;一般二三线以上的城市在不断发展中&#xff0c;地铁做…...

2023 IntelliJ IDEA下载、安装教程, 附详细图解

文章目录 下载与安装IDEA推荐阅读 下载与安装IDEA 首先先到官网下载最新版的IntelliJ IDEA, 下载后傻瓜式安装就好了 官网下载地址&#xff1a;https://www.jetbrains.com/ 1、下载完后在本地找到该文件&#xff0c;双击运行 idea 安装程序 2、点击 Next 3、选择安装路径&…...

YOLOv8改进系列:C2f模块全面升级——从C2f到C2f-Faster、C2f-DCN的高效变体实战

摘要 YOLOv8作为目标检测领域的标杆模型,其核心组件C2f(Cross Stage Partial with 2 fusions)模块在特征提取与融合方面表现出色。然而,随着工业应用对模型实时性与精度的双重追求,原生C2f模块的优化空间逐渐成为研究热点。本文系统介绍了C2f模块的改进方案,包括轻量化变…...

[电池SOC估算案例]: 使用Bilstm网络来实现锂电池SOC估计的算法(基于matlab编...

[电池SOC估算案例]: 使用Bilstm网络来实现锂电池SOC估计的算法&#xff08;基于matlab编写&#xff09; 1.使用锂离子电池间隔恒流放电数据集来完成&#xff0c;可更换恒流放电数据 2.提取电池的恒流充电放电中的电流与电压变量作为健康特征。 3.使用Bilstm网络来建立电池的SOC…...

魔搭社区vs HuggingFace:国内开发者下载Qwen2-7B的最快姿势

魔搭社区与HuggingFace&#xff1a;国内开发者高效获取Qwen2-7B的实战指南 当国内开发者需要获取最新开源大语言模型时&#xff0c;网络环境往往成为第一道门槛。以阿里云最新开源的Qwen2-7B模型为例&#xff0c;如何绕过下载速度慢、连接不稳定等痛点&#xff1f;本文将深度对…...

局部遮阴光伏MPPT仿真:粒子群算法详解及video explanation指引

局部遮阴光伏MPPT仿真-粒子群算法&#xff0c;有 video explanation光伏阵列在局部遮阴条件下会出现多峰特性&#xff0c;传统MPPT算法容易陷入局部最优。这时候就该粒子群算法&#xff08;PSO&#xff09;登场了——这种群体智能算法最适合在这种崎岖的功率曲线上玩冲浪。先看…...

【C语言形式化验证实战指南】:20年专家亲授3大工业级案例与5步验证落地法

第一章&#xff1a;C语言形式化验证概述与工业落地价值C语言形式化验证是指利用数学方法对C程序的语法、语义及行为进行严格建模与逻辑推理&#xff0c;以证明其满足特定安全属性&#xff08;如内存安全、无未定义行为、功能正确性等&#xff09;。不同于传统测试或静态分析&am…...

PyCharm调试Torch分布式训练的3个隐藏坑点(附2023最新解决方案)

PyCharm调试Torch分布式训练的3个隐藏坑点&#xff08;附2023最新解决方案&#xff09; 在深度学习领域&#xff0c;分布式训练已成为提升模型训练效率的标配技术。PyTorch作为当前最受欢迎的深度学习框架之一&#xff0c;其分布式训练功能备受开发者青睐。然而&#xff0c;当我…...

解决高版本VisualStudio编译低版本Unreal源码的常见问题与技巧

1. 环境配置的坑与填坑指南 第一次用Visual Studio 2022打开老版本Unreal工程时&#xff0c;我直接被满屏的报错整懵了。最典型的就是那个"Windows SDK v8.1 must be installed"错误&#xff0c;明明系统里装着最新SDK&#xff0c;它偏要旧版本。后来发现Unreal引擎的…...

面试官:说说动态线程池实现原理?

在线 Java 面试刷题&#xff08;持续更新&#xff09;&#xff1a;https://www.quanxiaoha.com/java-interview目录面试考察点核心答案深度解析一、动态线程池整体架构二、核心方法源码解析三、动态调整的线程安全保障四、实战&#xff1a;基于 Nacos 的动态线程池实现五、主流…...

告别越狱!用TrollStore在iOS 15上永久安装任意IPA(保姆级教程)

免越狱革命&#xff1a;TrollStore在iOS 15上的终极安装指南 当iOS用户遇到想安装的第三方应用却受限于系统限制时&#xff0c;传统解决方案往往指向越狱——这一伴随风险的操作如今有了更优雅的替代。TrollStore的出现彻底改变了游戏规则&#xff0c;它像一把瑞士军刀&#x…...

万物识别模型优化技巧:提升图片识别准确率的3个方法

万物识别模型优化技巧&#xff1a;提升图片识别准确率的3个方法 你是否遇到过这样的情况&#xff1a;满怀期待地将一张精心拍摄的照片丢给AI识别&#xff0c;结果它却给出了一个让人哭笑不得的答案&#xff1f;比如&#xff0c;把一只可爱的橘猫识别成了“一团毛线”&#xff…...