管道与信号量

news2024/12/25 13:34:35
一、基本知识

1、管道,是特殊的文件(基于内核(内存)上创建);以前的文件是在硬盘上创建。

2、工作方向

单工:数据方向单一,广播

半双工:同一时刻只能有一个方向,对讲机

全双工:同一时刻两个方向都可以通信,电话

3、无名管道,只能用于亲缘关系 进程间

A.c B.c

| |

A B


有名管道(没有关系的进程间)

fifo(管道)先进先出

有名管道这种类型,大小为0,如果用vi 打开的化相当于是打开了一个管道。

a、是一种特殊文件

1、存在与内存中

2、在系统中 有一个对应名称(被当作文件来看)

3、看文件大小0bytes(他并不是用来保存数据的,就是一个管道,要有流动)

b、

A.c                                                                                 B.c

|                                                                                         |

A                                                                                       B

二、编程

mkfifo()创建有名管道

第一个是指定管道的名字

mode 创建的权限

返回值

成功0

失败 -1

EEXIST pathname already exists. This includes the case where pathname is a symbolic link, dangling or not

因为有时候会创建的时候输入同名,但是如果判断加他是否重名,他就会出错退出,无法继续运行,在此,我们的目的就是未来,计算重名,我们也可以继续正常运行下去。他并不是创建失败了。

在这里管道,要求双方另一端,以相对的方式打开

用remove来删除管道

总结

1、有名管道 特殊文件,但是在系统中有一个名字

2、有名管道 可以用于 任意进程间通信

3、有名通道 操作符号 前面管道操作特点

4、管道中数据 遵循fifo 的读写规则

5、管道文件都不支持定位操作 lseek fseek


三、信号

本身并不能传递大量数据

信号是一种异步的通信方式

异步:

同步:

1、说明对象一定是两个

2、接收信号的时间不一定(异步),不是说一发就能收

2、如果步调一致-----同步

不管步调不一致 ------ 异步

中断

信号也称为软中断(在软件层面上 ----- 实现一个类似中断过程)

四、编程操作

1、signal(a)

功能:

信号处理函数的注册函数(安装)函

对某一各函数设置对某个信号进行处理的函数 注册

也就是说看谁要对这个信号处理,我们就在者部署即可,表示我们要对这个信号进行处理。

参数

signum 要处理的信号的编号

//注意:不能被阻塞,处理和忽略 SIGKILL STGSTOP

handler 要对这个信号做怎么的处理 ----handler是一个函数指针,指向信号处理函数

返回值(函数指针)(函数入口地址)

成功,表示上一次设置的 信号处理函数的入口地址(也就是说是在第一次设置一个信号处理,第二次有设置另一种的信号处理,最后在第二次运行完,返回的是第一次的入口地址)

失败 返回SIG_ERR

handler 这个参数可以设置为SIG_igN,忽略这个信号

handler 这个设置SIG_DFL,默认操作

2、自己设置一个函数,这个函数,可以做想做的事情,进程不被结束。

进程的状态都是结束,也就是说遇到这个就结束了

SIGKILL 和 SIGSTOP 不能被忽略,被阻塞,这个是重点,需要记忆

SIGCHLD

相当于是自己对在终端上发射的信号进行处理,来模拟对这个信号的一个软件中断(就是将这个信号捕捉到,并对他做出反应,但是其中有操作是没有用)

如果要想让其在一个信号处理函数实现不同的功能,只需要用if语句在里面进行判断一下 

3、kill()功能一样函数

功能:通过该函数可以给pid进程发送信号

SIGNAL,不管子进程正常结束还是异常结束,都能发射信号,进行接收

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法【Java】 —— 滑动窗口

滑动窗口 在上一篇文章中,我们了解到了双指针算法,在双指针算法中我们知道了前后指针法,这篇文章就要提到前后指针法的一个经典的使用 —— 滑动窗口,在前后指针法中,我们知道一个指针在前,一个指针在后&a…

Page与自定义Components生命周期

自定义组件 自定义组件一般可以用@component,装饰,在结构体里面用build方法定义UI,或者用@builder装饰一个方法,来作为自定义组件的构造方法 而页面page一般用@Entry,和@component结合起来使用 页面生命周期方法: onPageShow:页面每次显示时触发 onPageHide:页面每次隐藏时…

【LeetCode每日一题】——662.二叉树最大宽度

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 广度优先搜索 二【题目难度】 中等 三【题目编号】 662.二叉树最大宽度 四【题目描述】 给…

《python语言程序设计》2018版第7章第05题几何:正n边形,一个正n边形的边都有同样的长度。角度同样 设计RegularPolygon类

结果和代码 这里只涉及一个办法 方法部分 def main():rX, rY eval(input("Enter regular polygon x and y axis:"))regular_num eval(input("Enter regular number: "))side_long eval(input("Enter side number: "))a exCode07.RegularPol…

C++入门——01类与对象

1.类 1.1.类的引入 C语言中,结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。 struct Student {void SetStudentInfo(const char* name, const char* gender, int age){strcpy(_name, name);strcpy(_gen…

微信公众号批量上传、发布文章管理系统(Python版)

功能亮点 一键批量操作文章自动排版支持自定义文章数量适用于多号操作支持文章管理、查询、查看支持查询当前状态 适用对象 公众号运营批量文章上传发布矩阵号管理 部分关键代码及步骤 微信公众号后台的设置与开发栏目中的基本配置里获取appid和appsecret。 获取微信公众号…

软件测试 - 测试用例(设计测试用例的思路、万能公式、测试用例设计的方法)

一、测试用例 1.1 概念 测试用例( Test Case )是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环 境、操作步骤、测试数据、预期结果等要素。 1.2 编写测试用例 1)excel 表格编写 笔试题的测试用例…

【Nginx】Nginx 安装(平滑升级和回滚)

一、 Nginx 概述 Nginx 介绍 Nginx : engine X , 2002 年开发,分为社区版和商业版 (nginx plus ) 2019 年 3 月 11 日 F5 Networks 6.7 亿美元的价格收购 Nginx 是免费的、开源的、高性能的 HTTP 和反向代理服务器、邮件代理服务器、以…

路由器VLAN配置(H3C)

路由器VLAN配置(H3C) 控制页面访问 路由器默认处于192.168.1.1网段(可以短按reset重置),如果要直接使用需要设置静态IP处于同一网段; 对路由器进行配置也要将电脑IP手动设置为同一网段; 默…

音频剪辑软件哪个好用?五大音频剪辑软件分享

如果你正打算在家自学视频制作,那么恭喜你,你已经踏上了一段充满魔法与惊喜的旅程!不过,别忘了,视频的灵魂不仅仅在于画面,更在于那直击心灵的音效。 想象一下,一个精心剪辑的片段,…

如何拯救非正常专利申请?

在无忧专利微信公众号2023年年初的一篇文章中提到,出于提质增效的考虑,专利局加大了对非正常申请的打击力度。 专利局打击非正常申请的方式包括:建立黑名单、启用新的业务办理系统、使用大数据识别技术、惩罚非正常申请和非正常代理行为。 …

Vehicle Perception from Satellite(2024 TPAMI 卫星视频车流量监控)

Vehicle Perception from Satellite(2024 TPAMI 卫星视频车流量监控) 前言1.1 动机1.2 概述1.3 贡献 2 相关工作2.1 遥感中的目标检测2.2 计算机视觉中的相关任务2.3 卫星交通监控 3 TMS 数据集3.1 数据收集与预处理3.2 数据统计3.3 应用任务 4 实验4.1 …

C++奇迹之旅:手写vector模拟实现与你探索vector 容器的核心机制与使用技巧

文章目录 &#x1f4dd;基本框架&#x1f320; 构造和销毁&#x1f309;vector()&#x1f309;vector(const vector& v)&#x1f309;vector(size_t n, const T& value T())&#x1f309;赋值拷贝构造&#xff1a;vector<T>& operator(vector<T> v)&a…

XSS的DOM破坏

目录 1、DOM破坏案例解释 1.1先写一个demo.html文件 1.2、执行demo&#xff0c;看到是否将全部移除%20scr1%20οnerrοralert(1)> 分析&#xff1a; 解决&#xff1a;把两个for不在同一个数组进行操作 1.3、接下来我们要想办法让第二个for循环不能删除&#xff0c;留下…

android FD_SET_chk问题定位

android FD_SET_chk问题定位 一、FD报错二、问题定位2.1 APM定位2.2 adb定位2.3. 代码获取FD数 三、FD优化 一、FD报错 App在运行中记录报错如下&#xff0c;FD_SET&#xff0c;这个问题大概是文件描述符&#xff08;File Descriptor&#xff0c;简称FD&#xff09;超过了最大…

首款会员制区块链 Geist 介绍

今天&#xff0c;Pixelcraft Studios 很高兴地宣布即将推出 Geist&#xff0c;这是一个由 Base、Arbitrum、Alchemy 以及 Aavegotchi 支持的全新 L3。 Geist 之前的代号为 “Gotchichain”&#xff0c;是首个专为游戏打造的会员专用区块链。 为什么选择 Geist&#xff1f; …

Spring DI 简单演示三层架构——Setter 注入

Spring IOC 的常见注入方法有3种&#xff1a;Setter注入、构造注入和属性注入。想了解更多可点击链接&#xff1a;Spring 注入、注解以及相关内容补充 属性注入 不推荐。原因&#xff1a;使用私有的成员属性变量&#xff0c;依靠反射实现&#xff0c;破坏封装&#xff0c;只能依…

~Keepalived高可用集群~

一、Keepalived简介 是一个用于实现高可用性的解决方案&#xff0c;它主要应用于云主机的主备切换&#xff0c;以达到高可用性&#xff08;HA&#xff09;的目的。当主服务器发生故障无法对外提供服务时&#xff0c;动态将虚拟IP切换到备服务器&#xff0c;继续对外提供服务&a…

DOM破坏

XSS Game 1、第一关 Ma Spaghet! <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams.get(somebody) || "Somebody") " Toucha Ma Spaghet!" </script> S…

【ubuntu24.04】wget配置代理加速下载

参考之前的wget代理配置 wget速度非常慢 配置控制台代理不行 配置wget代理 本机部署了代理程序:all_proxy 不识别:root@PerfSvr:~# cat set65proxy.sh #!/bin/sh export