千锋教育嵌入式物联网教程之系统编程篇学习-04

news2024/9/22 7:33:43

目录

alarm函数

 raise函数

 abort函数

pause函数

 转折点

signal函数

可重入函数

信号集 

 sigemptyset()

 sigfillset

 sigismember()​

 sigaddset()​

 sigdelset()​

 代码讲解

 信号阻塞集

 sigprocmask()​


alarm函数

 相当于一个闹钟,默认动作是终止调用alarm函数的进程,其实也可以处理其他函数,在A进程中使用alarm函数,让B进程退出,至于场景你可以使用单片机的FreeRTOS场景去理解

 

 

 raise函数

场景分析:比如A进程的功能实现完了,想退出进程了,那么就可以发信号给自己

相当于freertos中的删除任务,本任务的作用就是初始化,任务完成后,我就删除自己释放空间。至于raise会做什么处理我就不知道了,你只需要知道它有这个功能即可

  getpid()获取自己的进程号

 abort函数

 注意:即使SIGABRT信号被加入到了阻塞集的话,一旦使用该函数,还是会被终止。你像上面的alarm函数,产生一个SIGALRM信号,假如SIGALRM这个信号加入到了阻塞集的话,那就无法立马响应了,这就是两者的区别

最后的提醒会有所不一样,alarm是闹钟

pause函数

等待信号的产生,一般是等待另外一个进程或者线程发送信号给我 ,就有点类似于freertos的信号量一样,我设置二值信号量阻塞等待,就有点类似于了。

因此举例的话,你可以创建子进程,父进程使用pause函数,等待子进程发信息给父进程

 

 转折点

我们之前一直讲信号的默认处理方式,那么说明肯定不仅仅是默认处理方式,其处理方式我们可以设定,就像之前的alarm函数肯定不仅仅对调用着,也可以对其他的进程者,任何实现呢?

使用函数signal()

目的:使用alarm函数对其他进程进行暂停处理

signal函数

 

 

 定义一个函数地址,void*fun();

 

回调函数使用,跟stm32的HAL库一样,通过信号区分哪一个信号来了 

 

目的:子进程隔1s打印一次son,而父进程隔一秒打印father,并且都是死循环,
当父进程的循环变量为6时,使用alarm(3),并且使用signal函数让它处理子进程,
因此此时子进程会退出,而父进程继续执行

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
 
int main()
{
    __pid_t pid;
    pid = fork();

    if(pid < 0)
    {
        perror("fork fail\n");
        exit(1);
    }
    else if(pid == 0)
    {
        printf("son process\n");
        int son ;
        for(son=1;son>0;son++)
        {
            sleep(1);
            printf("son\n");
      
        }

    }
    else
    {
        printf("father process\n");
        int fa = 0;
        for(fa=1;fa>0;fa++)
        {
            sleep(1);
            printf("father\n");
            if(fa == 6)
{
    alarm(3);
printf("father is alarm\n");
signal();
}
    
        }
    }
    

}

可重入函数

多个任务并发使用,其实就是可以被中断的代码,回来后能在原来的地方继续正常运行。但是我在使用的时候,并没有理解好该类函数的作用。留个印象即可,等之后深入的就可以回想起来

基于第二点:说明只能使用栈区

 代码操作:进入函数时,首先保存此时的error的值,等该函数结束后,再恢复原值

信号集 

将多个信号放在一起形成一个集合(结构体中的数组,这个数组保存的就是信号集),因此可以实现一个进程同时对多个信号进行处理(在宏观上,个人觉得)。不过信号集会与信号阻塞集联系在一起,他们可以配套使用

 

 sigemptyset()

数据类型:sigset_t

 sigfillset

理解一下功能,将信号集合设置为所有信号的集合,说明里面有所有的信号了

 sigismember()

 sigaddset()

 sigdelset()

 代码讲解

 信号阻塞集

用于暂缓某一个信号的通知(传送),下面的b老师并没有直接跟a说你先讲课,我等你。而是静静的等待者,等下课了,再进去通知他,再结合前面的知识知道,b老师通知a老师去开会(信号到达),但是不一定a老师会去,这就看他对这个信号如何处理了,前面有讲过信号的处理

 sigprocmask()

因此信号集与信号阻塞集一起使用

场景:将sigint(来源于Ctrl + c),添加到信号集,再把该信号集添加到阻塞集,那么我们按Ctrl + c该进程不会被退出(前提是该进程是死循环)

 

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

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

相关文章

HSCSEC 2023 个人练习

&#x1f60b; 大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白。本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;欢迎关注&#x1f601;&#xff0c;一起学习 &#x1f497; &#xff0c;一起进步 ⭐ 。⭐ 此后如竟没有炬火&#xff0c;我便是唯一的光。…

聊一聊国际化i18n

i18n 概述i18n 是国际化的缩写&#xff0c;其完整的写法是 Internationalization&#xff0c;翻译为国际化。国际化是指在软件开发中对于不同语言和地区的支持。目的是为了让一款软件可以在不同的语言和地区环境下正常运行&#xff0c;使其适应全球各地的用户。这通常包括对语言…

Simulink 自动代码生成电机控制:低阶滑模观测器仿真实现及生成代码在开发板上运行

目录 理论参考 仿真实现 运行演示 总结 前段实时搭过高阶的滑模观测器&#xff0c;相比于高阶的&#xff0c;普通的滑模观测器计算量小更适合计算能力低的MCU&#xff0c;这里参考Microchip的16位MCU所使用的观测器&#xff0c;通过Simulink建模仿真实现系统控制&#xff0…

【查看多个长图】如何方便地在安卓手机上查看多个长图?如何更便捷地浏览长图合集

经常我会看到有些知识分享是通过长图形式进行。 往往在手机本地的图片浏览器中不能很方便地查看很多长图&#xff08;能放大&#xff0c;但是横向滑动时&#xff0c;无法保证同样的放缩比例浏览同一个文件夹&#xff09;。 我推荐下面一个APP和曲折解决办法。 1、perfect vi…

Error: Timeout trying to fetch resolutions from npm

总目录&#xff1a; 如何使用VSCode插件codesight扫描出前端项目的风险依赖包并借助 npm-force-resolutions 修复之&#xff1f;blackduck issue fix 文章目录问题描述【最终解决】我搜索到的解决方案npmjs 该依赖各版本列表及对应的被下载次数github issue 说降级到0.0.3就可以…

(十五)、从插件市场引入问题反馈页面【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1&#xff0c;插件市场问题反馈页面 插件市场链接 dloud插件插件市场中找到问题反馈插件&#xff1a; 首先确保登录了dcloud账号。 使用hbuilderX导入插件到自己项目中。 选择合并导入。 从插件市场导入意见反馈页面的路径地址如下&#xff1a; 2&#xff0c;点击跳转到…

论文阅读_AlphaGo_Zero

论文信息 name_en: Mastering the game of Go without human knowledge name_ch: 在没有人类知识的情况下掌握围棋游戏 paper_addr: http://www.nature.com/articles/nature24270 doi: 10.1038/nature24270 date_publish: 2017-10-01 tags: [‘深度学习’,‘强化学习’] if: 6…

【C++封装】C++面向对象模型

文章内容如下&#xff1a; 1&#xff09;成员变量和函数的存储 2&#xff09;this指针 3&#xff09;const修饰成员函数 4&#xff09;有元 一。成员变量和函数的存储 C实现了封装&#xff0c;数据(-变量)和处理数据的操作(-函数)是分开存储的&#xff0c;C中的非静态数据…

SpringBoot Notes

文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程&#xff1a;6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…

[LeetCode周赛复盘] 第 333 场周赛20230219

[LeetCode周赛复盘] 第 333 场周赛20230219 一、本周周赛总结二、 [Easy] 6362. 合并两个二维数组 - 求和法1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6365. 将整数减少到零需要的最少操作数1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6364. 无平方子集计数1. 题目描…

操作系统闲谈08——系统调用、中断、异常

操作系统闲谈08——系统调用、中断、异常 一、系统调用 IDT - GDT - 系统调用表 找到对应系统调用号将系统调用号以及一些现场信息存入寄存器eax中&#xff08;ebx、ecx、edx存放其他信息&#xff09;&#xff0c;然后触发软中断&#xff08;x86中&#xff0c;0x80为中断号&…

设计模式 状态机

前言 本文梳理状态机概念&#xff0c;在实操中状态机和状态模式类似&#xff0c;只是被封装起来&#xff0c;可以很方便的实现状态初始化和状态转换。 概念 有限状态机&#xff08;finite-state machine&#xff09;又称有限状态自动机&#xff08;英语&#xff1a;finite-s…

ThreadLocal知识点总结

什么是ThreadLocal&#xff1f;它的作用是什么&#xff1f; ThreadLocal是线程Thread中属性threadLocals的管理者。 ThreadLocal是Java中lang包下的一个类&#xff0c;可以用于在多线程环境中为每个线程维护独立的变量副本。它的作用是让每个线程都拥有自己的数据副本&#xff…

Java面向对象的特性:封装,继承与多态

Java面向对象的特性 在学习Java的过程是必须要知道的Java三大特性&#xff1a;封装、继承、多态。如果要分为四类的话&#xff0c;加上抽象特性。 封装 1.封装概述 是面向对像三大特征之一&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09; 是面向对象编程语言对客…

语音增强学习路线图Roadmap

语音增强算是比较难的研究领域&#xff0c;从入门到精通有很多台阶&#xff0c;本文介绍一些有价值的书籍&#xff0c;值得反复阅读。主要分为基础类和进阶类书籍&#xff0c;大多都是理论和实践相结合的书籍&#xff0c;编程实践是抓手,让知识和基础理论变扎实。基础书籍《信号…

RT-Thread初识学习-01

1. RT-Thread 简介 1.1 RT-Thread 是什么 据不完全统计&#xff0c;世界有成千上万个 RTOS&#xff08;Real-time operating system&#xff0c;实时操作系统&#xff09;&#xff0c;RT-Thread 就是其中一个优秀的作品。 RT-Thread 内核的第一个版本是熊谱翔先生在 2006 年…

分布式-分布式存储笔记

读写分离 什么时候需要读写分离 互联网大部分业务场景都是读多写少的&#xff0c;读和写的请求对比可能差了不止一个数量级。为了不让数据库的读成为业务瓶颈&#xff0c;同时也为了保证写库的成功率&#xff0c;一般会采用读写分离的技术来保证。 读写分离的实现是把访问的压…

LeetCode-384-打乱数组

1、列表随机 为了能够初始化数组&#xff0c;我们使用nums保存当前的数组&#xff0c;利用orignal保存初始化数组。为了实现等可能随机打乱&#xff0c;考虑到随机数本质上是基于随机数种子的伪随机&#xff0c;我们采用如下的方式实现等可能随机&#xff1a;我们将所有元素压…

MySQL备份恢复(十二)

文章目录1. MySQL数据损坏类型1.1 物理损坏1.2 逻辑损坏2. DBA运维人员备份/恢复职责2.1 设计备份/容灾策略2.1.1 备份策略2.1.2 容灾策略2.2 定期的备份/容灾检查2.3 定期的故障恢复演练2.4 数据损坏时的快速准确恢复2.5 数据迁移工作3. MySQL常用备份工具3.1 逻辑备份方式3.2…

【scl】博图程序的导入和导出

导入或者导出博图文件的方法&#xff08;也叫移植文件&#xff09; 目录 前言 ​编辑 ​编辑 前言 本篇文章主要写一下关于博图文件的导入和导出&#xff0c;具体要怎么样才能将写好的程序或者块移植到其他地方&#xff0c;下面我们一起来看&#xff01; 一、程序块的导入和导…