void sig_int(int signo)
{
printf("got SIGINT\n");
return;
}
int main() {
signal(SIGINT,sig_int);
while(1)
{
sleep(1);
}
return 0;
}
上面运行时,按crtl+C,就不停的输出:got SIGINT。这说明SIGINT的回调函数一直是sig_int,而signal函数的返回值是一个函数指针,说是返回以前的处理配置,这个返回值到底有什么作用呢?
signal(SIGINT,sig_int);调用完之后,SIGINT的回调函数一直是sig_int,并没有恢复到默认啊
signal的返回值的用处就是用来恢复信号处理行为,你可以写在你的信号处理程序中,比如:
sighandler_t old_handler = NULL;
void sig_int(int signo)
{
printf("got SIGINT\n"); //第一次按ctrl+c,被我们捕捉了,打印这一句
signal(SIGINT, old_handler); //恢复默认的处理,再按ctrl+c的话,就会终止程序
return;
}
int main() {
old_handler = signal(SIGINT,sig_int);
while(1)
{
sleep(1);
}
return 0;
}