signal函数的简单用法
1、函数原型理解
void (*signal(int sig,void(*func)(int)))(int);
指定使用sig指定的信号编号处理信号的方法。
signal函数的返回值是函数指针。
比如说,void * myfunc(); 我们说myfunc函数的返回值类型是void*
同样, 函数指针的形式举例:
void (* )(int)
*边上的空白处可以填写变量名或者函数名,
我们将signal函数带入空白处,就是如上的形式了。
简化一下:typedef void (*sighandler)(int);----->将 void (*) (int) 用sighandler代替;
void (*signal(int sig,void(*func)(int)))(int);------>void (*signal(int sig,sighandler handler)(int);
再简化:
void (*signal(int sig,sighandler handler)(int);----------------->sighandler signal(int sig,sighandler handler);
可以先想象signal()这个函会先执行,执行完毕后剩下的int ( * )()就是signal的返回值类型,很显然这个类型是个函数指针。
小结:困扰的地方在于,函数的返回值为函数指针,而函数指针的形式,当我们带入函数进去的时候,函数名是是在函数指针里面的,这个不同于普通的指针返回值。
handler指定程序可以处理信号的三种方式之一:
默认处理(SIG_DFL): 信号由该特定信号的默认动作处理
忽略信号(SIG_IGN): 忽略信号,即使没有意义,代码执行仍然继续。
函数处理程序: 定义一个特定的函数来处理信号
2、函数参数说明:
第一个参数是要捕捉的信号(查看信号:kill -l,9号SIGKILL信号不能被捕捉);
第二个参数表示我们要对信号进行的处理方式。
1)忽略信号//如:忽略Ctrl+c信号
int main()
{signal(2,SIG_IGN);//忽略信号while(1){printf("aaaaa");sleep(6);}return 0;
}
2) 默认动作
int main()
{signal(2,SIG_DFL);//默认处理信号while(1){printf("aaaaa");sleep(6);}return 0;
}
3)自定义处理函数//捕捉到这个信号后,按照handler处理函数进行操作
#include<signal.h>
void handler(int signo)
{printf("signal:%d\n:",signo);
}
int main()
{signal(2,handler);while(1){printf("hello world\n");sleep(6);}return 0;
}
signal函数的简单用法相关推荐
- linux中signal函数的简单用法
信号是软件中断,它提供了一种处理异步事件的方法,每个信号有个以SIG打头的名字,讲signal函数之前我们先了解下当前系统所支持的信号名称,在linux中敲下kill -l就能查看. [lingyun ...
- python3的格式化用法_浅析python3字符串格式化format()函数的简单用法
format()函数 """ 测试 format()函数 """ def testformat(): # format()函数中有几个元素, ...
- matlab中ode45函数的用法_带你理解Excel中COUNTIF函数的简单用法
每天5分钟,每天学一点. COUNTIF函数是Excel中最常用的统计函数之一,它的作用主要是用于根据特定条件对数据进行统计.假如,你想统计一下本周总共做了几次健身/瑜伽,或者统计上了几次培训课,那么 ...
- MATLAB中画折线图:plot函数的简单用法
20年4月24日更新 关于MATLAB里柱状图的画法,以及如何在图例legend和轴标签xlabel里加入latex公式,请参考 https://blog.csdn.net/u014261408/ar ...
- map函数的简单用法。
在这里感谢新浪博客的daylive的博文: Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作! 1. map ...
- C语言带空格的字符串输入——gets()函数、scanf()函数缺陷以及改进后的gets_s()函数、scanf_s()函数的简单用法(上)
**在C语言中,带空格的字符串输入问题相对而言还是比较"坑"的,所以呢,小编就决定要专门谈一谈这个问题,希望对于初学者能够有所帮助. 该篇主要简述了C语言中gets()函数以及sc ...
- c 高级函数的简单用法
c 中内置了很多高级的函数,我们先使用排序函数看一下 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <str ...
- Oracle中sign函数的简单用法
sign函数语法: sign(n) sign函数说明: 取数字n的符号,大于0返回1,小于0返回-1,等于0返回0 示例: select sign( 100 ),sign(- 100 ),sign( ...
- oracle lag group,Oracle中的lag()和lead()函数的简单用法(统计增长率)
这两个函数,是偏移量函数,其用途是:可以查出同一字段下一个值或上一个值,并作为新列存在表中. 准备数据 select t.row_id, t.product_code, t.product_price ...
最新文章
- 【OpenCV 4开发详解】直方图应用
- Trailblazer —— Rails 的扩展概念驱动开发框架
- 中文论文万能句型_SCI 论文写作万能句型汇总(很实用)
- GitHub上3天1W赞的程序员学习路线!入门进阶都非常实用
- HashSet 的contains方法
- 纸白银:交易简便成本低
- win10电脑突然开不了热点,怎么办
- 181004有道扇贝每日一句
- C#实现秒杀器之网站登录
- Android轮播换背景,Android实现背景图片轮播
- 《翻译与本地化CAT软件实用教程》目录
- JavaScript循环刷新页面
- 【Steam VR 2.0】自定义按键 action 发布后无效的解决办法
- python查询12306余票_【python】用GUI编写一个12306余票查询的系统,附源码
- 基于MPlayer的QT媒体播放器
- 明源售楼系统技术解析(四)右键菜单
- Python的线程如何理解
- 用计算机研究脑电波,可用于计算机硬盘识别及脑电波测量的量子传感器【中国科讯】...
- 用计算机投屏图片,手机投屏Windows7电脑图文教程
- 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上