void(* signal(int sig,void(* func)(int)))(int);
设置处理信号的功能
头文件为:#include <signal.h>
指定使用sig指定的信号编号处理信号的方法。 参数func指定程序可以处理信号的三种方式之一:
1、默认处理(SIG_DFL):信号由该特定信号的默认动作处理。
2、忽略信号(SIG_IGN):忽略信号,即使没有意义,代码执行仍将继续。
3、函数处理程序:定义一个特定的函数来处理信号。
其中忽略并不是没有处理信号或者接收,只是它接收后没有做任何改变。
其中sig常见的参数有以下几种:
返回值:
singal函数的返回值是一个函数指针,该指针指向之前与指定信号相关联的处理函数。这允许你在将信号处理程序设置为新函数之前,先保存旧的处理程序,以便稍后进行恢复或其他操作。
通俗的说就是,当你调用 signal
函数设置一个新的信号处理函数时,它会返回之前与指定信号相关联的处理函数的指针。这是为了方便你在需要的时候可以重新安装之前的处理程序,或者在信号处理程序执行完毕后恢复到原来的处理方式。
例子:
#include <stdio.h>
#include <signal.h>
// 自定义信号处理函数
void new_handler(int signum) {
printf("New handler: Received signal %d\n", signum);
}
int main() {
// 设置 SIGINT 信号的新处理函数为 new_handler
void (*old_handler)(int);
old_handler = signal(SIGINT, new_handler);
// 模拟一段时间后恢复原来的处理函数
sleep(5);
// 恢复之前的处理函数
signal(SIGINT, old_handler);
while (1) {
// 程序的主循环
}
return 0;
}