<signal.h> 是 C 语言标准库中的头文件,提供了对信号处理的支持。信号是一种软件中断,通常用于通知程序发生了一些事件。<signal.h> 中包含了一组函数和宏,用于设置和处理信号。

以下是 <signal.h> 中常见的函数和宏:

1. void (*signal(int signum, void (*handler)(int)))(int);
   - signal 函数用于设置对信号 signum 的处理方式。handler 是一个指向函数的指针,用于处理接收到的信号。返回值是之前设置的信号处理函数的指针。

2. 信号常量:
   - SIGABRT:程序中止命令。
   - SIGFPE:浮点异常。
   - SIGILL:非法指令。
   - SIGINT:终端中断符。
   - SIGSEGV:段错误。
   - SIGTERM:终止请求。

3. SIG_DFL 和 SIG_IGN:
   - SIG_DFL:默认的信号处理方式。
   - SIG_IGN:忽略信号。

4. raise(int signum)
   - raise 函数用于向当前进程发送信号 signum。

下面是一个简单的例子,演示了如何使用 <signal.h> 来处理信号:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>

// 信号处理函数
void signal_handler(int signum) {
    printf("Received signal %d\n", signum);

    // 恢复默认处理方式
    signal(signum, SIG_DFL);

    // 重新发送信号
    raise(signum);
}

int main() {
    // 设置信号处理函数
    signal(SIGINT, signal_handler);

    printf("Press Ctrl+C to trigger a SIGINT signal.\n");

    // 无限循环等待信号
    while (1) {
        // do nothing
    }

    return 0;
}

在这个例子中,程序通过 signal(SIGINT, signal_handler) 设置了对 SIGINT 信号的自定义处理函数 signal_handler。当用户按下 Ctrl+C 时,将触发 SIGINT 信号,然后执行自定义的信号处理函数。在处理函数中,我们打印收到的信号,并将信号处理方式恢复为默认处理方式,然后重新发送信号,以终止程序。请注意,这个例子是为了演示信号处理的基本概念,并不是最佳的处理信号的方式。在实际应用中,信号处理往往需要更复杂的逻辑和稳健的设计。


转载请注明出处:http://www.zyzy.cn/article/detail/3207/C语言