C语言 <signal.h> signal 函数
-
描述
C库函数void(* signal(int sig,void(* func)(int)))(int)设置处理信号的函数,即信号编号为sig的信号处理程序。 -
声明
以下是signal函数的声明。void (*signal(int sig, void (*func)(int)))(int)
参数- sig - 这是要发送的信号号。以下是一些重要的标准信号常数-
- SIGABRT - (信号中止)异常终止,如由函数启动。
- SIGFPE - (信号浮点异常)错误的算术运算,如除零或导致溢出的运算(不一定是浮点运算)。
- SIGILL - (信号非法指令)无效的函数图像,如非法指令。这通常是由于代码损坏或试图执行数据造成的。
- SIGINT - (信号中断)交互注意信号。通常由应用程序用户生成。
- SIGSEGV - (信号分割冲突)对存储器的无效访问——当程序试图在分配给它的内存之外读写时。
- SIGTERM - (信号终止)发送给程序的终止请求。
- func - 这是指向函数的指针。这可以是程序员定义的功能,也可以是以下预定义功能之一。
- SIG_DFL - 默认处理-该信号由该特定信号的默认操作处理。
- SIG_IGN - 忽略信号-信号被忽略。
-
返回值
此函数返回信号处理程序的先前值,如果出错则返回SIG_ERR。示例以下示例显示signal函数的用法-#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> void sighandler(int); int main () { signal(SIGINT, sighandler); while(1) { printf("Going to sleep for a second...\n"); sleep(1); } return(0); } void sighandler(int signum) { printf("Caught signal %d, coming out...\n", signum); exit(1); }
让我们编译并运行上述程序,它将产生以下结果,并且程序将进入无限循环。为了使用该程序,我们使用了CTRL + C键。Going to sleep for a second... Going to sleep for a second... Going to sleep for a second... Going to sleep for a second... Going to sleep for a second... Caught signal 2, coming out...