目录

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该进程不会被退出(前提是该进程是死循环)

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

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

    目录 课程视频链接 笔记目的 什么是系统编程 如何操作内核的系统调用 系统调用的分类​编辑 系统调用的返回值 系统调用IO函数 文件描述符 文件IO文件描述符与标准IO的文件指针对应关系 Man手册使 ...

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

    目录 无名管道 无名管道创建--pipe() 管道重点问题 无名管道读写规律 fcntl设置文件阻塞特性 文件描述符概述 文件描述符的复制-dup和dup2 dup函数 dup2​ 无名管道 进程间的 ...

  3. C语言基础大全(基于千锋教育超详细教程)

    C语言基础 1.第一个c语言程序 #include <stdio.h> int main() {printf("hello world");return 0; } [外 ...

  4. 千锋教育python全集_千锋教育-Python逆战班1905期(完整版)

    千锋教育面授课程包含HTML5大前端培训.JavaEE+分布式开发培训.Python全栈+人工智能培训.全链路UI/UE设计培训.云计算培训.全栈软件测试培训.大数据+人工智能培训.智能物联网+嵌入式 ...

  5. 千锋教育+计算机四级网络-计算机网络学习-01

    目录 课程链接 最早的广域网 计算机网络发展阶段 计算机网络的定义与要点 英文单词网络术语与解释 计算机网络分类 广域网技术 城域网 局域网 个人局域网 五种基本的网络拓扑结构​ 误码率 电路交换网特 ...

  6. 千峰python 培训南京千锋教育IT培训赋能人才

    10月31日,中国正式开启第五代移动通信网络(5G)商用时代,这也标志着中国通信发展史进入了一个新的里程碑.中国移动.联通.电信三大运营商纷纷推出5G套餐,超快的网速使得许多市民跃跃欲试.显然,5G商 ...

  7. 千锋教育python2104期总结day2

    千锋教育python2104期总结day2 第一次总结: 基础语法和变量 目录 更改基础设置, 写出第一句代码 基础语法 输入和输出函数 变量 正文 1. 更改基础设置,写出第一句代码 1)设置pyc ...

  8. 千锋教育python2104期总结day14

    千锋教育python2104期总结 第十三次总结: 常用系统模块和文件操作 目录 time模块 datetime模块 hashlib模块 文件操作 读写操作 数据存储操作 作业 正文 1.time模块 ...

  9. 千锋教育python2104期总结day15

    千锋教育python2104期总结 第十四次总结: json和异常 目录 文件操作补充 json数据 异常模块 作业 正文 1.文件操作补充 打开不存在的文件 """ 如 ...

最新文章

  1. 4.Git基础-查看提交历史
  2. 动态SQL应用(成绩排名)
  3. [原]我装Solaris的艰苦经历
  4. .NET静态类的概念
  5. servlet返回数据给html_Servlet 简介
  6. oracle中创建一个用户,只能查看指定的视图,如何授权,创建别名
  7. 主板电源开关接口图解_主板跳线接法示意图,超详细适合DIY新手
  8. 服务器电源常见故障判断及处理方法
  9. 雷达多普勒频率计算公式_详细分析:合成孔径雷达成像技术
  10. python编程猜拳游戏_python代码实现猜拳小游戏
  11. linux文件解压缩加解密
  12. 如何安装Chrome扩展程序或插件
  13. 对比分析高速传输和同步软件:Aspera 与 镭速(Raysync)
  14. [vivado系列]Vivado软件的下载
  15. JS中typeof() !== 'undefined'的解释
  16. AX3600开启SSH功能
  17. CentOS7安装MariaDB的流程步骤
  18. linux番茄时钟,Linux 番茄时钟 定时 取消 快捷方式
  19. linux zmq环境配置,zmq安装与使用
  20. Struts2 - 异常处理: exception-mapping 元素

热门文章

  1. 超级使用体验==笔记本电脑+机械键盘(合体)敲击咔咔咔
  2. tab weui 页面切换_weui tabbar 切换
  3. C语言中关键字restrict的用法(linux 为 __restrict)
  4. 华为手机活了?今年出货量目标提升到4000万!底气从何而来?
  5. 网易互联网 笔试 8.20
  6. Latext安装(二)WinEdt安装+激活教程
  7. jQuary学习笔记
  8. 微信公众号自定义菜单关联小程序
  9. css学习笔记 day two
  10. Visual C++ 在windows 7 上预编译头错误unexpected precompiled header error, simply rerunning the compiler migh