以下是 <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语言