首页 > UNIX 中signal函数返回值问题

UNIX 中signal函数返回值问题

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;
}

【热门文章】
【热门文章】