进程间的通信之管道(匿名管道)

news/2024/7/8 0:58:15

文章目录

    • 进程间通信(IPC)
    • 管道
      • 管道特点
      • 为什么可以使用管道进行进程间通信
      • 管道数据结构
      • 匿名管道的使用
    • 管道实例
    • 管道读写特点
    • 管道设置非阻塞

进程间通信(IPC)

inter process conmmunication
在这里插入图片描述
👇👇👇*&*:
在这里插入图片描述
上边除了共享内存还可以使用内存映射。

管道

管道特点

在这里插入图片描述在这里插入图片描述

为什么可以使用管道进行进程间通信

在使用fork创建进程后,文件描述符被复制,有两个相同的文件描述符同时指向管道。
在这里插入图片描述

管道数据结构

在这里插入图片描述

匿名管道的使用

在这里插入图片描述
在这里插入图片描述
注意: 匿名管道只能用于具有关系的进程之间的通信(父子,兄弟,孙子进程)。
使用读函数读取的时候管道没有资源会进入阻塞态。
获取管道大小
可以通过ulimit -a
也可以通过long size = fpathconf(fd, _PC_PIPE_BUF),返回值就是其大小.

匿名管道情况:
在这里插入图片描述

管道实例

在这里插入图片描述
dup2文件描述符的重定向

管道读写特点

阻塞IO操作

读管道:
当管道中有数据,读取时返回实际读取的字节数。
当管道中没有数据:
如果有写端,则阻塞等待数据;
如果没有写端,则返回0。

写管道:
若没有读端,进程异常终止(进程收到SIGPIPE信号)
当有读端时:
当管道满了,则写时进入阻塞等待有空间再写;
管道没有满,write写入数据,并返回实际写入的字节数。

对于非阻塞的操作:
非阻塞输入时,阻塞状态的情况会返回-1.

管道设置非阻塞

在这里插入图片描述


http://lihuaxi.xjx100.cn/news/1367779.html

相关文章

Istio Pilot源码学习(一):Pilot-Discovery启动流程、ConfigController配置规则发现

本文基于Istio 1.18.0版本进行源码学习 1、Pilot-Discovery工作原理 Pilot-Discovery是Istio控制面的核心,负责服务网格中的流量管理以及控制面和数据面之间的配置下发 Pilot-Discovery从注册中心(如Kubernetes)获取服务信息并汇集&#xff…

Java使用Jsoup实现一个网页爬虫

更多文章:技数未来 (techdatafuture.com) Jsoup是一个开源的Java HTML解析库,用于从网页中提取和操作数据。它提供了一种简单和方便的方式来处理HTML,并且可以在Java中实现网页爬虫。 Jsoup的优点包括: 1. 简单易用:J…

【微信小程序】使用button组件来实现一个带有点击效果的按钮,按钮中间添加一个大的+号图标

在微信小程序中&#xff0c;你可以使用button组件来实现一个带有点击效果的按钮&#xff0c;并在按钮中间添加一个大的号图标。以下是一个示例代码&#xff1a; <button class"button"><text class"plus"></text> </button>.butt…

Two Days wpf 分享 分页组件

迟来的wpf分享。 目录 一、序言 二、前期准备 三、前端界面 四、后台代码部分 1、先定义些变量后面使用 2、先是按钮事件代码。 首页按钮 上一页按钮 下一页按钮 末尾按钮 画每页显示等数据 每页显示多少条 判断是否为数字的事件 分页数字的点击触发事件 跳转到…

sqlserver触发器

sqlserver 和 oracle 触发器还是有区别的&#xff0c;sqlserver 没有for each row 的概念&#xff0c;执行一条语句&#xff0c;无论多少条数据&#xff0c;触发一次&#xff0c;所以要用游标循环&#xff0c;做逻辑判断。当然&#xff0c;也可以考虑同临时表&#xff0c;再遍历…

css 修改滚动条样式

css 修改滚动条样式 修改el-table滚动条样式 <style lang"less" scoped> .el-table {/deep/ .el-table__body-wrapper::-webkit-scrollbar {width: 10px;height: 10px;}/*滚动条轨道 *//deep/ .el-table__body-wrapper::-webkit-scrollbar-track {box-shadow…

IDE/mingw下动态库(.dll和.a文件)的生成和部署使用(对比MSVC下.dll和.lib)

文章目录 概述问题的产生基于mingw的DLL动态库基于mingw的EXE可执行程序Makefile文件中使用Qt库的\*.a文件mingw下的*.a 文件 和 *.dll 到底谁起作用小插曲 mingw 生成的 \*.a文件到底是什么为啥mingw的dll可用以编译链接过程转换为lib引导文件 概述 本文介绍了 QtCreator mi…

1253. 重构 2 行二进制矩阵

1253. 重构 2 行二进制矩阵 给你一个 2 行 n 列的二进制数组&#xff1a; 矩阵是一个二进制矩阵&#xff0c;这意味着矩阵中的每个元素不是 0 就是 1。第 0 行的元素之和为 upper。第 1 行的元素之和为 lower。第 i 列&#xff08;从 0 开始编号&#xff09;的元素之和为 cols…