本章介绍signal函数的使用:
表头文件
| #include<signal.h> |
定义函数
| void (*signal(int signum,void(* handler)(int)))(int); |
函数说明
| signal()会依参数signum 指定的信号编号来设置该信号的处理函数。当指定的信号到达时就会跳转到参数handler指定的函数执行。如果参数handler不是函数指针,则必须是下列两个常数之一: SIG_IGN 忽略参数signum指定的信号。 SIG_DFL 将参数signum 指定的信号重设为核心预设的信号处理方式。 关于信号的编号和说明,请参考附录D |
返回值
| 返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。 |
实例1:
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void my_func(int sign_no)
{
if(sign_no==SIGINT)
printf("I have get SIGINT\n");
else if(sign_no==SIGQUIT)
printf("I have get SIGQUIT\n");
}
int main()
{
printf("Waiting for signal SIGINT or SIGQUIT \n ");
/*注册信号处理函数*/
signal(SIGINT, my_func);
signal(SIGQUIT, my_func);
pause();
exit(0);
}
程序一直在等待SIGINT和SIGQUIT的信号,当该信号出现时,就会跳到my_func函数中执行,在linux中ctrl+c就可以发送SIGINT信号,ctrl+\就是发送SIGQUIT信号。
实例2:上面的函数说明提到,signal函数的参数还可以设置为SIG_IGN,此时系统会默认忽略该信号,不做任何处理
程序改动如下:
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, my_func);
实例3:signal函数的参数还可以设置为SIG_DFL