IO进程(6)

目录

1.进程间通信

1.1无名管道

1.1.1读写特性

1.1.2函数

1.2有名管道

1.2.1函数接口

​​​​​​​​​​​​​​1.2.2读写特性

2.信号

2.1信号的概念

​​​​​​​​​​​​​​2.2信号的分类

​​​​​​​​​​​​​​2.3信号的处理方式

​​​​​​​2.4信号产生的方式有如下几种

​​​​​​​​​​​​​​2.5信号

​​​​​​​2.6信号函数

2.6.1发送信号

​​​​​​​​​​​​​​2.6.2闹钟信号


1.进程间通信

1.1无名管道

特点

  1. 只能用于具有亲缘关系的进程之间的通信
  2. 半双工的通信模式,具有固定的读端和写端
  3. 管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO如read、write函数.
  4. 管道是基于文件描述符的通信方式。当一个管道建立时,它会创建两个文件描述符

fd[0]和fd[1]。其中fd[0]固定用于读管道,而fd[1]固定用于写管道。

1.1.1读写特性

1.当管道中无数据时,读操作会阻塞;

管道中无数据时,将写端关闭,读操作会立即返回

2.管道中装满(管道大小64K)数据写阻塞,一旦有4k空间,写继续

3.只有在管道的读端存在时,向管道中写入数据才有意义。否则,会导致管道破裂,向管道中写入数据的进程将收到内核传来的SIGPIPE信号 (通常Broken pipe错误)。Broken pipe:管道破裂

​​​​​​​1.1.2函数

int pipe(int fd[2])
功能:创建无名管道
参数:文件描述符 fd[0]:读端  fd[1]:写端 
返回值:成功 0
      失败 -1

示例:

1.2有名管道

特点

1.有名管道可以使互不相关的两个进程互相通信

2.有名管道可以通过路径名来指出,并且在文件系统中可见,但内容存放在内存中

3.进程通过文件IO操作有名管道

4.有名管道遵循先进先出规则

5.不支持如lseek() 操作

1.2.1函数接口

#include <sys/types.h>
#include <sys/stat.h>int mkfifo(const char *filename,mode_t mode);
功能:创健有名管道
参数:filename:有名管道文件名
       mode:权限
返回值:成功:0        爱no
       失败:-1,并设置errno号

示例:

对于这种情况我并不希望它直接return输出,而是我们存在这个文件,我直接就继续向下执行就可以了

解决方案:

补充:

  1. 当管道文件存在(报错提示file exists)时的处理方式:

判断errno的值为EEXIST时,只是打印提示语句,if(errno == EEXIST)

  1. 注意代码中出现errno,需要添加头文件#include <errno.h>

​​​​​​​​​​​​​​1.2.2读写特性

  1. 只写方式,写阻塞(阻塞在打开文件的位置),一直到另一个进程把读打开
  2. 只读方式,读阻塞(阻塞在打开文件的位置),一直到另一个进程把写打开
  3. 可读可写,如果管道中没有数据,读阻塞

有名管道和无名管道的区别:

无名管道

有名管道

使用场景

只能在亲缘关系进程

不相关的任意进程

特点

有固定的读端和写端

文件IO进行操作

先入先出原则

不支持lseek操作

存放在存储的内核空间

在文件系统中存在管道文件

文件IO进行操作

先入先出原则

不支持lseek操作

存放在存储的内核空间

操作方式

直接进行读写操作

先打开管道文件,再读写操作

函数

pipe

mkfifo

2.信号

2.1信号的概念

  • 信号是在软件层次上对中断机制的一种模拟,是一种 异步通信方式
  • 信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。
  • 如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。

​​​​​​​​​​​​​​2.2信号的分类

在Linux中,信号被分为不可靠信号和可靠信号,一共64种,可以通过kill -l命令来查看

  • 不可靠信号:也称为非实时信号,不支持排队,信号可能会丢失,比如发送多次相同的信号,进程只能收到一次,信号值取值区间为1~31
  • 可靠信号:也称为实时信号,支持排队,信号不会丢失,发多少次,就可以收到多少次,信号值取值区间为34~64

​​​​​​​​​​​​​​2.3信号的处理方式

  • 忽略信号:不做任何处理
  • 捕捉信号:执行自定义的信号处理函数
  • 执行(缺省)默认操作:Linux系统中对每种信号规定了默认操作,即执行信号默认的功能

​​​​​​​2.4信号产生的方式有如下几种

  • 对于前台进程,用户可以输入特殊字符来发送,比如输入 Ctrl c
  • 系统状态变化:比如alarm定时器到期时将引起SIGALRM信号
  • 在终端运行kill命令或在程序中调用kill函数

​​​​​​​​​​​​​​2.5信号

SIGKILL:结束进程,不能被忽略不能被捕捉 9

SIGSTOP:结束进程,不能被忽略不能被捕捉 19 停止信号

SIGCHLD:子进程状态改变时给父进程发的信号,不会结束进程 17

SIGINT:结束进程,对应的快捷方式 ctrl c 2

SIGTSTP:暂停信号,对应的快捷方式 ctrl z 20

SIGQUIT:退出信号,对应的快捷方式 ctrl \ 3

SIGALRM:闹钟信号,alarm函数设置定时,当到设定的时间时,内核会向进程发送此信号结束进程 14

SIGTERM:结束终端进程,kill使用时不加数字默认是此信号 15

​​​​​​​2.6信号函数

2.6.1发送信号

#include <signal.h>
int kill(pid_t pid, int sig);
功能:信号发送
参数:pid:指定进程
   sig:要发送的信号
返回值:成功 0     
       失败 -1

示例:

给调用raise这个函数的进程发送信号

int raise(int sig);
功能:进程向自己发送信号
参数:sig:信号
返回值:成功 0   
       失败 -1

示例:

父子之间进行信号发送

​​​​​​​

​​​​​​​​​​​​​​2.6.2闹钟信号

#include <unistd.h>
unsigned int alarm(unsigned int seconds)
功能:在进程中设置一个定时器
参数:seconds:定时时间,单位为秒
返回值:
    如果调用此alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0
注意:一个进程只能有一个闹钟时间。如果在调用alarm时
	已设置过闹钟时间,则之前的闹钟时间被新值所代替

示例:

int pause(void);
功能:用于将调用进程挂起,直到收到信号为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/406094.html

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

相关文章

Tensorflow 2.16.0+在PyCharm中找不到keras的报错解决

在PyCharm(2024.2版本)中&#xff0c;直接使用from tensorflow import keras会提示“Cannot find reference ‘keras’ in ‘init.py’ ”&#xff0c;找不到keras&#xff0c;如下图所示。 查阅相关资料&#xff0c;可以发现在tf2.16之后&#xff0c;默认的keras后端升级为了…

【Git】常见命令的使用

Git 介绍流程安装常见命令本地仓与远程仓关联 介绍 Git、Svn&#xff1a;版本控制器&#xff08;用于多人团队协作&#xff09; Svn&#xff1a;集中式版本控制器&#xff1b;版本库集中放在中央服务器&#xff0c;操作非常简单&#xff0c;鼠标右键提交、新增、下载 Git&…

C语言小tip之整型提升

今天让我们来学习一下C语言中的一个小知识点-----整型提升 什么叫整型提升呢&#xff1f; C语言中整型算术运算总是至少以缺省&#xff08;默认&#xff09;整型类型的精度来进行的。​为了获得这个精度&#xff0c;表达式中的字符和短整型操作数在使用之前被转换为普通整型&a…

基于机器学习的二手房房价数据分析与价格预测模型

有需要本项目的可以私信博主&#xff0c;提供远程部署讲解 本研究聚焦重庆二手房市场&#xff0c;通过创新的数据采集和分析方法&#xff0c;深入探讨影响房价的关键因素&#xff0c;并开发了预测模型。 我们首先利用Python编写的爬虫程序&#xff0c;巧妙规避了链家网站的反…

环境配置1-MobaXterm服务器中Anaconda、Pytorch的安装

①登录 Login as 输入密码时密码不显示&#xff0c;正常输入即可 ②进入指定的下载目录 出现类似界面后&#xff0c;键盘操作Ctrlc即可进行输入 cd / …….(要下载到的目录名称)/ Anaconda的安装 ①输入wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux…

基于Java的小区物业管理系统设计与实现

TOC springboot596基于Java的小区物业管理系统设计与实现--论文 研究背景 小区物业管理系统主要通过计算机网络&#xff0c;对小区物业管理系统所需的信息进行统一管理&#xff0c;方便用户随时随地进行增添、修改、查询、删除各类信息。本系统极大的促进了系统与数据库管理…

【Kubernetes】k8s集群之包管理器Helm

目录 一.Helm概述 1.Helm的简介 2.Helm的三个重要概念 3.Helm2与Helm3的的区别 二.Helm 部署 1.安装 helm 2.使用 helm 安装 Chart 3.Helm 自定义模板 4.Helm 仓库 每个成功的软件平台都有一个优秀的打包系统&#xff0c;比如Debian、Ubuntu 的 apt&#xff0c;RedH…

如何构建和使用“无审查”模型

一些已经构建好的“无审查”模型 https://huggingface.co/ehartford/WizardLM-30B-Uncensored https://huggingface.co/ehartford/WizardLM-13B-Uncensored https://huggingface.co/ehartford/WizardLM-7B-Uncensored https://huggingface.co/ehartford/Wizard-Vicuna-13B-…

3.js - 使用着色器实现各种图形

有更多案例&#xff0c;私我 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls import * as dat from dat.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// ts-ignore import basi…

Prometheus3: 监控CPU

1. 查看监控CPU所需的key [rootlocalhost node_exporter]# curl http://localhost:9100/metrics | grep -i node_cpu | head% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed0 0 0 0 …

03、Redis实战:商户查询缓存、缓存更新策略、缓存穿透、缓存雪崩、缓存击穿

2、商户查询缓存 2.1 什么是缓存? 什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震器&qu…

初阶数据结构之计数排序

非比较排序 计数排序 计数排序⼜称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应⽤。 操作步骤&#xff1a; 1&#xff09;统计相同元素出现次数 2&#xff09;根据统计的结果将序列回收到原来的序列中 #include "CountSort.h" void Count(int* arr, int n)…

线段树-点修区查

翻博客的时候突然发现线段树好像一个没有&#xff0c;我就准备把线段树给讲一下 分三个章节 点修区查 区修区查 区修区查&#xff08;带乘法&#xff09; 今天这一章比较简单&#xff0c;最多就区查稍微要动一点脑子 题目简介 输入n和m&#xff0c;n代表数的个数&#x…

读软件开发安全之道:概念、设计与实施05模式(上)

1. 模式 1.1. 模式分类 1.1.1. 设计属性 1.1.2. 暴露最少信息 1.1.3. 冗余 1.1.4. 强力执行 1.1.5. 信任与责任 1.1.6. 反模式 1.2. 模式可以缓解或者避免很多种类的风险&#xff0c;它们可以形成一个重要的工具箱&#xff0c;帮我们解决潜在的安全威胁 1.3. 不需要为…

学习设置echarts 折线图使用相关参数的方法整理

学习设置echarts 折线图使用相关参数的方法整理 折线图堆叠设置为不堆叠的方法 折线图堆叠设置为不堆叠的方法 官网是这样的&#xff0c;但是不需要这种堆叠形式的如下图&#xff1a; 第2条数据值 第1条数据值 第2条数据值 第3条数据值 第2条数据值 第3条数据值 需要改成…

C语言高手参考手册:函数进阶技巧

[大师C语言]合集&#xff3b;大师C语言(第一篇)&#xff3d;C语言栈溢出背后的秘密&#xff3b;大师C语言(第二十五篇)&#xff3d;C语言字符串探秘&#xff3b;大师C语言(第二篇)&#xff3d;C语言main函数背后的秘密&#xff3b;大师C语言(第二十六篇)&#xff3d;C语言结构体…

汽车管理 API 接口:开启高效车辆运营新时代

API&#xff08;Application Programming Interface&#xff09;是一种接口&#xff0c;用于不同软件之间的通信。在汽车管理领域&#xff0c;API的应用可以帮助提升车辆运营的效率&#xff0c;让车主和车辆管理者更方便地获取车辆相关信息&#xff0c;进行保养和维修等工作。本…

Linux yum提示Error downloading packages

很明显的错误&#xff0c;没有考虑过磁盘空间&#xff0c;记录一下。 Error downloading packages:gcc-4.8.5-44.el7.x86_64: Insufficient space in download directory /var/cache/yum/x86_64/7/base/packages* free 0 * needed 16 M使用du查看当前目录下所有文件大小 du …

黑马头条vue2.0项目实战(十一)——功能优化(组件缓存、响应拦截器、路由跳转与权限管理)

1. 组件缓存 1.1 介绍 先来看一个问题&#xff1f; 从首页切换到我的&#xff0c;再从我的回到首页&#xff0c;我们发现首页重新渲染原来的状态没有了。 首先&#xff0c;这是正常的状态&#xff0c;并非问题&#xff0c;路由在切换的时候会销毁切出去的页面组件&#xff…

HBase原理和操作

目录 一、HBase在Zookeeper中的存储元数据信息集群状态信息 二、HBase的操作Web Console命令行操作 三、HBase中数据的保存过程 一、HBase在Zookeeper中的存储 元数据信息 HBase的元数据信息是HBase集群运行所必需的关键数据&#xff0c;它存储在Zookeeper的"/hbase&quo…