如何在C语言中实现信号处理?

我正在学习C语言并希望实现对信号的处理。我了解到在Unix/Linux系统中,我们可以使用signal()函数来设置信号处理程序。但我不太清楚如何在C语言中正确地定义和使用这些信号处理程序。如果有大神可以提供一些实例代码或者详细的解释,帮助我更好地理解和运用信号处理功能,将不胜感激。谢谢!

提问时间:2023-06-27 09:46:59 编辑时间:2023-06-27 09:47:01 提问者: 雨中彩虹
  • Neon_Light
    1

    在C语言中,可以使用signal()函数来设置信号处理程序,其函数原型如下:

    void (*signal(int sig, void (*func)(int)))(int);
    
    

    其中,sig表示信号类型,func为信号处理函数指针。在信号处理函数中,一般需要使用一些系统调用来处理信号,如打印日志、修改程序状态等。另外,需要注意一些信号的默认行为,如SIGKILL和SIGSTOP不能被捕获和处理,而SIGINT默认会中断进程。

    下面给出一个简单的示例代码,通过设置信号处理程序,在收到SIGINT信号时,输出一行提示信息并退出:

    #include <stdio.h>
    #include <stdlib.h>
    #include <signal.h>
    
    void sigint_handler(int sig) {
        printf("Received SIGINT, exiting...\n");
        exit(0);
    }
    
    int main() {
        signal(SIGINT, sigint_handler);
        while (1) {
            printf("Running...\n");
            sleep(1);
        }
        return 0;
    }  
    
    

    在上述代码中,首先定义了一个名为sigint_handler的信号处理函数,当收到SIGINT信号时,会打印提示信息并使用exit()函数退出进程。然后在main函数中,使用signal()函数将SIGINT信号和对应的处理函数绑定。最后进入一个死循环,每隔1秒打印一行信息,直到收到SIGINT信号并执行处理函数退出进程。

    回答时间:2023-06-27 09:47:04