【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),这意味着它只能进行单向数据流的传输。具体而言,管道可以提供两个方向的数据流,一个是从写端到读端的方向,另一个是从读端到写端的方向。但是,不能同时在这两个方向上进行读写操作。
当父进程创建一个管道后,可以通过写端向管道中写入数据,然后通过读端从管道中读取数据。但是,父进程不能同时使用同一个管道进行读写操作。同样,子进程也可以使用同一个管道进行读写操作,但是也不能同时进行。
管道的特点
- 管道是单向同行的,也叫半双工
- 管道的本质是文件,因为fd的生命周期随进程,管道的生命周期也是随进程的
- 管道通信,通常用来进行具有“血缘”关系的进程,进行进程间通信。常用于父子通信。
- 在管道通信中,写入的次数和读取的次数,不是严格匹配的。
具有一定的协同能力,让read和write能按照一定的步骤进行通信
管道的四种场景
- 如果我们read读取完毕了所有管道数据,如果读端没有写入,那么写端就会一直等待
- 如果我们write端写满后,我们就会停止写入,直到读端读取数据后才可以正常写入
- 如果我们关闭了写端,当读端将写端最后的数据读取完再度取是就会返回0,表示已经读到了文件结尾。
- 如果写端一直写,读端关闭那么系统将直接通过kill -13进行终止
匿名管道的退出
因为当管道的读端关闭后,写端也会随之关闭,当我们让父进程进程读,子进程进行写时,我们关闭写端后,子进程是否会正常退出,我们来认识分析一下
命名管道的退出

mkfifo用于创建一个FIFO(命名管道)文件。FIFO文件在使用后会保留在文件系统中,不会自动删除。
如果想要自动删除需要用到
unlink命令在调用unlink函数后,它会尝试删除指定的文件。如果成功删除文件,unlink将返回0,否则返回-1,并且此时可以通过errno变量获取错误信息。
相关文章:
【Linux】管道
管道命令 #include <unistd.h> int pipe(int pipefd[2]); 在Linux中,管道(pipe)的返回值是一个整数数组,包含两个文件描述符。这两个文件描述符分别代表管道的读端和写端。 当成功创建一个管道时,pipe() 系统调用…...
postgre 12.11单实例安装文档
一 下载 访问https://www.postgresql.org/download/,点击左侧的‘source进行下载,一般选择bz2的安装包。 二 安装 这里安装12.11版本的postgre,数据目录路径为/data/server/pgdata,端口为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.前言 现在的手机越来越先进,功能也越来越多,而手机…...
基于视觉重定位的室内AR导航项目思路(1):最初的项目思路(SLAM)
文章目录 最初的项目思路(SLAM):后文: 前情提要: 是第一次做项目的小白,文章内的资料介绍如有错误,请多包含! 最初的项目思路(SLAM): 由于我们在…...
小白学go基础05-变量声明形式
和Python、Ruby等动态脚本语言不同,Go语言沿袭了静态编译型语言的传统:使用变量之前需要先进行变量的声明。 变量声明形式使用决策流程图 这里大致列一下Go语言常见的变量声明形式: 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双线协议,需要重新配置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,那么Shader是个什么概念呢?其实对于开发同事来说还是比较难理解的,一般来说Shader是服务于图形渲染的一类技术,开发人员可以通过其shader语言来自定义显卡渲染页面的算法࿰…...
苹果电脑要安装杀毒软件吗?mac用什么杀毒软件好?
对于这个问题让人很是纠结,Mac不需要杀毒这个理论一直都深入人心,Mac OS X权限管理特性可以防毒的说法也一直甚嚣尘上,很多小伙伴如我一样搞不清楚到底要不要安装杀毒软件。,毕竟当前个人信息安全泄露泛滥不穷的年代,我…...
MySQL——索引
索引在 MySQL 数据库中分三类: B 树索引Hash 索引全文索引 目的:在查询的时候提升效率 b树 参考:https://blog.csdn.net/qq_40649503/article/details/115799935 数据库索引,是数据库管理系统中一个排序的数据结构…...
110. 平衡二叉树
题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 递归法: 我的代码: *** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* Tree…...
遗忘因子递推最小二乘参数估计(FFRLS)
基于遗忘因子的最小二乘法电池参数辨识 最小二乘法是系统辨识中最常用的一种估算方法。为了克服最小二乘法存在”数据饱和”的问题,我们通常采用含有遗忘因子的递推最小二乘法(Forgetting Factor Recursive Least Square,FFRLS)算法进行电池模型的参数辨识。 1、二…...
【redis进阶】基础知识简要回顾
1. 常见功能介绍 聚合统计 使用list集合的差集、并集来统计 排序统计 SortedSet(ZSet)统计,再利用分页列出权重高的元素 二值状态统计 BitMap存储,获取并统计 SETBIT uid:sign:3000:202008 2 1 GETBIT uid:sign:3000:202008 2…...
HTML5-3-表格
文章目录 属性边框属性标题跨行和跨列单元格边距 HTML 表格由 <table> 标签来定义。 tr:tr 是 table row 的缩写,表示表格的一行。td:td 是 table data 的缩写,表示表格的数据单元格。th:th 是 table header的缩…...
Spring Boot + Vue的前后端项目结构及联调查询
Spring Boot Vue的前后端项目结构及联调查询 当你刚开始学习前后端开发时,可能会感到有些困惑和不知所措。下面是一些建议,希望能为你的学习之旅提供一些启示: 建立坚实的基础知识:学习前后端开发的第一步是建立坚实的基础知识。…...
Transformer貌似也是可以使用state递归解码和训练的
import paddle import numpy as npclass HeadLoss(paddle.nn.Layer):def __init__(self):super(HeadLoss, self).__init__()...
振弦采集仪应用地铁隧道安全监测详细解决方案
振弦采集仪应用地铁隧道安全监测详细解决方案 随着城市化进程的不断加快,地铁作为一种高效、便捷、环保的交通方式已经成为现代城市不可或缺的一部分。因此,对地铁的安全性也越来越重视,一般二三线以上的城市在不断发展中,地铁做…...
2023 IntelliJ IDEA下载、安装教程, 附详细图解
文章目录 下载与安装IDEA推荐阅读 下载与安装IDEA 首先先到官网下载最新版的IntelliJ IDEA, 下载后傻瓜式安装就好了 官网下载地址:https://www.jetbrains.com/ 1、下载完后在本地找到该文件,双击运行 idea 安装程序 2、点击 Next 3、选择安装路径&…...
北京数据恢复公司排名哪家好
在当今数字化时代,数据的重要性不言而喻。无论是个人用户的珍贵照片、文档,还是企业的重要业务数据,一旦丢失都可能造成巨大的损失。在北京,有众多的数据恢复公司,如何选择一家靠谱的公司成为了许多人关心的问题。下面…...
汽车产业变革:从颠覆到协作的生态模式与SDV实践
1. 从“颠覆”到“协作”:汽车产业权力格局的深层变革在科技行业浸淫超过二十五年,我经历过三次真正意义上的“颠覆时刻”。第一次是2006年,Luminary Micro推出首款Arm Cortex-M3微控制器,它彻底改变了嵌入式系统的游戏规则。第二…...
LSP4J-MCP:连接语言服务器与AI的协议桥接器实践
1. 项目概述:当LSP遇上MCP,一场开发工具链的“协议融合”如果你是一名长期与IDE打交道的开发者,无论是写Java、TypeScript还是其他语言,大概率都听说过或者用过语言服务器协议。它让VS Code、IntelliJ IDEA这些编辑器能理解代码、…...
从样式覆盖到版本升级:全面解析Antd表格固定列对齐问题的解决路径
1. 问题复现:当Antd表格固定列开始"跳舞" 第一次遇到Antd表格固定列错位问题时,我正喝着咖啡调试一个后台管理系统。突然发现表格右侧的固定列像被施了魔法——表头和内容列完全错开,活像跳着蹩脚的探戈。这种问题在Antd 3.x版本中…...
Tarjan算法:从DFS序到强连通分量的寻路指南(附C++实战与缩点技巧)
1. 从迷宫探索到强连通王国:Tarjan算法的生活隐喻 想象你正在探索一座巨大的迷宫,手里拿着粉笔和记事本。每走到一个新的岔路口,你就在墙上标记数字(第一个到的路口标1,第二个标2...),这就是DFS…...
【ElevenLabs企业级语音AI落地指南】:20年音视频架构师亲授——3大合规陷阱、4类集成断点、1套可审计部署框架
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs Enterprise方案全景认知 ElevenLabs Enterprise 是面向中大型组织构建的语音合成与语音智能平台,提供高保真、低延迟、多语言、可定制的语音生成能力,并深度集成企业…...
eFuse 的核心作用
它触及了设备安全性的核心机制——eFuse。 简而言之:一台已经烧录(blown)了 eFuse 的设备,其安全机制与未烧录 eFuse 的设备有本质区别,你之前在非 eFuse 设备上成功的代码修改(强制 check_key 返回 0)很可能在烧录了 eFuse 的设备上无效。 以下是详细解释: eFuse 的…...
壁纸引擎安卓版(wallpaper engine安卓版免费下载)
wallpaper engine安卓版是Steam上的Wallpaper Engine官方的安卓应用程序。 Wallpaper Engine Android 应用程序是免费的,支持将现有 Wallpaper Engine 壁纸合集无线传输到您的 Android 移动设备。 ————————————————————————————————…...
告别玄学调参:用Python+NumPy手把手复现MIMO信道SVD分解与注水算法
告别玄学调参:用PythonNumPy手把手复现MIMO信道SVD分解与注水算法 在无线通信领域,MIMO(多输入多输出)技术通过利用空间维度显著提升了系统容量和可靠性。然而,许多工程师在实际应用中常陷入"玄学调参"的困境…...
【信息科学与工程学】【通信工程】第四十三篇 骨干网方案设计-02跨境网络
一、方案 1.1 整体方案设计概要 设计的云网融合方案,综合考虑其全球互联需求、安全合规性、性能优化及跨国运营挑战: 1.1.1、需求分析 网络互联需求: 国内互通: 安全、稳定、低延迟连接中国大陆(严格合规要求)。 国际互通: 高性能连接美国(东西海…...






