c语言标准库详解(十三):信号<signal.h>
概述
头文件<signal.h>提供了一些处理程序运行期间引发的各种异常条件的功能,比如来源于外部的中断信号或程序执行错误引起的中断信号。
signal函数
void (*signal(int sig, void (*handler)(int)))(int)
signal 决定了如何处理后续的信号。如果 handler 的值是 SIG_DFL,则采用由实现定义的默认行为;如果 handler 的值是 SIG_IGN,则忽略该信号;否则,调用 handler 指向的函数(以信号作为参数)。有效的信号包括:
信号名 | 功能 |
---|---|
SIGABRT | 异常终止,例如由abort引起的终止 |
SIGFPE | 算术运算出错,如除数为0或溢出 |
SIGILL | 非法函数映像,如非法指令 |
SIGINT | 用于交互式目的的信号,如中断 |
SIGSEGV | 非法存储器访问,如访问不存在的内存单元 |
SIGTERM | 发送给程序的终止请求 |
对于特定的信号,signal 将返回 handler 的前一个值;如果出现错误,则返回值 SIG_ERR。
当随后碰到信号 sig 时,该信号将恢复为默认行为,随后调用信号处理程序,就好像由(*handler)(sig)调用的一样。信号处理程序返回后,程序将从信号发生的位置重新开始执行。
信号的初始状态由具体的实现定义。
那么这个函数该怎么读:
中间部分 :
signal( int sig, void (*func)(int))
signal函数有2个参数,第一个是int,第二个是无返回值,带一个int参数的函数指针
外围:
void (*signal(xxx)) (int)
signal函数返回的是一个函数指针,无返回值,有一个int参数
简化:
typedef void Sigfunc(int)
Sigfunc就代表的就是一个 返回值是一个无返回值,有一个int参数的函数。
最后就成了这样
Sigfunc *signal(int, Sigfunc*)
这部分参考了https://blog.csdn.net/ly0303521/article/details/49563417