匿名管道详解
进程间通讯的目的
- 数据传输:一个进程需要把它的数据发送给另一个数据
- 资源共享:多个进程需要共享同样的资源
- 通知事件:一个进程需要向另一个或者一组进程发送消息,通知它发生了某种事件(如进程终止时要通知父进程)
- 进程控制:有些进程希望控制另一个进程的执行,此时控制进程希望可以拦截另一个进程所有陷入和异常,并能及时知道它的状态改变
简而言之,就是需要多个进程协同共同完成一些事情
进程通讯的方式
- 匿名管道,命名管道
- System V IPC 消息队列,共享内存,信号量
- POSIX IPC 消息队列,共享内存,信号量,互斥量,条件变量,读写锁
匿名管道
pipe函数创建一无名管道
参数:fd文件描述符,其中fd[0]表示读端,fd[1]表示写端
返回值:成功返回0,失败返回返回错误代码
pipe创建的是内存级的文件,匿名文件(管道),匿名管道只能进行血缘关系进程通讯。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>int main()
{int fds[2];int n = pipe(fds);char buffer[1024];if(n<0)//返回值小于0,创建失败{perror("pipe error!\n");exit(1);}//fork创建子进程,可以继承父进程的PCBpid_t pid = fork();if(pid==0)//子进程{close(fds[1]);//关闭写端while(1){size_t size = read(fds[0],buffer,sizeof(buffer)-1);if(size<=0){printf("子进程读取退出\n");exit(1);}buffer[size] = 0;printf("子进程读取到:%s",buffer);memset(buffer,0,sizeof(buffer));}}//父进程关闭读端close(fds[0]);while(fgets(buffer,sizeof(buffer),stdin)){size_t len = strlen(buffer);if(len<=0){continue;}size_t size = write(fds[1],buffer,len);if(size!=len){perror("write error, exit!\n");exit(2);}else{printf("父进程写端写入:%s",buffer);}memset(buffer,0,sizeof(buffer));}return 0;
}
匿名管道的4种情况
- 管道内部没有数据,写端不关闭自己的写端文件符fd,读端就要阻塞等待
- 管道内部被写满,读端不关闭自己的读端文件符fd,写端就要阻塞等待
- 对于写端而言,关闭写端文件符wfd,读端就会把pipe中数据读完,最后就会读到返回值为0,表示读结束,类似读到了文件结尾
- 对于读端而言,关闭读端文件符rfd,写端再写,操作系统就会给写端进程发送信号SIGPIPE,写端进程收到信号,默认动作中止进程。(linux信号详解)
4个注意点
- 匿名管道只能用于父子进程通讯
- pipe是面向字节流的
- 父子进程退出,管道自动释放,文件的生命周期是随进程的
- 管道只能单向通讯
其实匿名管道在内核中是下面这样:
相关文章:

匿名管道详解
进程间通讯的目的 数据传输:一个进程需要把它的数据发送给另一个数据资源共享:多个进程需要共享同样的资源通知事件:一个进程需要向另一个或者一组进程发送消息,通知它发生了某种事件(如进程终止时要通知父进程&#…...

深度解读MySQL意向锁的工作原理机制与应用场景
意向锁 意向锁的概念 意向锁是InnoDB自动添加的一种锁,不需要用户去干预。 是数据库中的一种表级锁,一个事务要给一个资源加锁时,必须要先获取到对应类型的意向锁之后,才可以给这个资源加上自己想要的共享锁或者排他锁࿰…...
ZYNQ TCP 协议的远程更新 QSPI Flash
1 SDK直接少些Flash过程 ****** Xilinx Program Flash ****** Program Flash v2019.1 (64-bit)**** SW Build 2552052 on Fri May 24 14:49:42 MDT 2019** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.WARNING: Failed to connect to hw_server at TCP:127.0.0.1:3…...

告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷!粘贴队列功能太强大了!
告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷! CleanClip for Mac 📋 是一款专为Mac用户设计的高效剪贴板管理工具。它解决了传统复制粘贴过程中的繁琐问题,让你的工作流程更加顺畅和高效。 🔄…...

前端基础知识(HTML+CSS+JavaScript)
文章目录 一、HTML1.1 HTML 基础:1.1.1 HTML 的概念:1.1.2 认识 HTML 标签:1.1.3 HTML 文件基本结构:1.1.4 标签层次结构: 1.2 HTML 快速入门:1.3 HTML常见标签:1.3.1 标题标签:h1-h…...
算力服务器和GPU服务器的区别是什么?
随着互联网科技的快速发展,服务器的类型也变得多种多样了,今天小编就来为大家介绍一下算力服务器和GPU服务器还有他们之间的区别是什么? 算力服务器通常是指具有着较高计算能力的服务器,算力服务器一般都是用于处理大量的计算任务…...

获取Live2d模型
文章目录 1、 Live2D官方示例数据集(可免费下载)2、模之屋3、unity商店4、直接b站搜索5、youtube6、BOOTH完结 1、 Live2D官方示例数据集(可免费下载) 官方提供了一些 Live2D实例模型给大家下载使用 地址:https://ww…...

软考架构-层次架构风格
一、两层C/S架构 客户端和服务器都有处理功能。处理在表示层(客户端)和数据层(服务器)进行 二、三层C/S架构 将处理功能独立出来。表示层在客户机上,功能层在应用服务器上,数据层在数据库服务器上。 三…...

Unity射击游戏开发教程:(35)轰炸敌人
现在敌人和飞机已经慢慢地越来越有各自地地行为了,在本文中,我们将介绍如何创建一个具有以下行为的敌人: 飞机会来回弹跳。飞机将有 4 架无人机轰炸机围绕飞机旋转。无人机轰炸机会偶尔投下沿着屏幕传播的炸弹。如果炸弹击中玩家或在随机时间后就会爆炸。如果炸弹没有击中玩…...

【网络】高级IO——select版本TCP服务器
目录 前言 一,select函数 1.1.参数一:nfds 1.2.参数二: readfds, writefds, exceptfds 1.2.1.fd_set类型和相关操作宏 1.2.2.readfds, writefds, exceptfds 1.2.3.怎么理解 readfds, writefds, exceptfds是输入输出型参数 1.3.参数三…...

【C++】学完c语言后的c++基础知识补充!(命名空间、输入和输出、缺省函数、函数重载、引用、内联函数代替宏、nullptr代替NULL)
一. 命名空间 1. 定义 出现的意义:解决各种函数、关键词和类的名称冲突问题。 定义方式:namespace 命名空间的名字 { } (注意!}后面不加;) namespace 是关键词命名空间的…...
uniapp自定义导航栏以及页面加背景
如果想给uniapp的页面加背景图片的话,疯狂度了之后会发现uniapp中背景图片用本地图片不起效果,所以一般用网络路径,之后又会发现,页面如果直接加背景的话有可能会遇到页面内容不够,背景撑不满整个页面,如果…...

MacOS Sonoma(14.x) 大写模式或中文输入法下的英文模式,光标下方永远会出现的CapsLock箭头Icon的去除办法
如图,MacOS Sonoma(14.x) 大写模式或中文输入法下的英文模式下,光标下方永远会出现一个CapsLock箭头Icon。此Icon挡住视野,还容易误触导致切换大小写状态,带来的收益远远小于带来的困扰。 解决办法 打开终端,输入以下…...
C#基础(10)变长参数和参数默认值
前言 作为函数的补充知识点,我们已经学习了ref和out,接下来两节我们继续来讲函数相关的内容。本节则讲解变长参数和参数默认值。 函数语法 关键字:params public void PrintNumbers(params int[] numbers) {for 相关逻辑 } 注意 params…...
Vue转React开发经验分享——hooks写法如何触发react生命周期、如何触发数据更新?
背景:习惯了vue的写法,并且vue2和vue3都比较熟悉,在转react开发中,不停的思考react和vue框架的相似之处,以及vue中的写法在react里怎么替换。本文将组件更新或组件生命周期角度出发聊聊如何使用hooks触发生命周期&…...

算法入门-贪心1
第八部分:贪心 409.最长回文串(简单) 给定一个包含大写字母和小写字母的字符串 s ,返回通过这些字母构造成的最长的回文串 的长度。 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串…...

element-plus的面包屑组件el-breadcrumb
面包屑组件主要用来显示当页面路径,以及快速返回之前的页面。 涉及2个组件 el-breadcrumb 和el-breadcrumb-item, el-breadcrumb的spearator指定item的分隔符 el-breadcrumb-item的to和replace属性和vue-router的一致,需要结合vue_router一起使用 用法…...
推荐几个网盘资源站给大伙,找资源更方便
夸克网盘在当前已然成为极为主流的网盘之一,其功能体验堪称强大,不仅支持在线解压阅读,磁力离线等功能也十分出色。那么,究竟该如何寻找夸克资源呢?下面,我就来为大家分享几个堪称神级的夸克资源网站。 一、…...

【Qt】Qml界面中嵌入C++ Widget窗口
1. 目的 qml做出的界面漂亮,但是执行效率低,一直想找一个方法实现qml中嵌入c界面。现在从网上找到一个方法,简单试了一下貌似可行,分享一下。 2. 显示效果 3. 代码 3.1 工程结构 3.2 pro文件 需要添加widgets > QT quick …...
Python快速入门 —— 第五节:接口开发
第五节:接口开发 目标: 学习使用Flask框架开发简单的Web接口,实现对学生信息的增删改查,通过HTTP请求与应用交互。 内容: Flask简介: Flask是一个轻量级的Python Web框架,使用简单,扩展性强,适合快速开发Web应用。安装Flask: pip install flask创建Flask应用: fr…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...