首页 > 学院 > 开发设计 > 正文

Linux下C库学习 - signal.h

2019-11-11 06:41:31
字体:
来源:转载
供稿:网友

本系列只是为了研究C语言的头文件,如果signal.h展开讲感觉就有点跑题了,网上有许多对信号机制的解析,写的都非常好,大家可以搜一些,这里就只对signal进行记录,以便后续继续学习。

信号 在命令行界面输入kill -l就可以看到所以的信号以及对应的编号

列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。

细心的人可能会发现,上图的编号没有32和33,不知道是不是系统保留的信号,不过我在signum.h里面找到了这两个定义

#define SIGLOST 32 /* Resource lost (Sun); server died (GNU). */#define _NSIG 33 /* Biggest signal number + 1. */

知道的大神,希望能在下方留言指点

signal函数 系统使用signal函数来注册信号处理函数,声明如下void (*signal(int signum, void (*handler)(int)))(int);

为了方便理解,POSIX进行了如下定义

typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);

可以看到signal函数有两个参数

signum 指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号

handler 有三种选择 SIG_IGN:忽略参数signum所指的信号。 SIG_DFL:恢复参数signum所指信号的处理方法为默认值。 sighandler_t类型的函数指针。

返回值是返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。


上一篇:CGLib动态代理

下一篇:c#delegate原理瞎想

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表