void (*signal(int sig, void (*func)(int)))(int)
优质
小牛编辑
132浏览
2023-12-01
描述 (Description)
C库函数void (*signal(int sig, void (*func)(int)))(int)设置处理信号的函数,即信号编号为sig的信号处理程序。
声明 (Declaration)
以下是signal()函数的声明。
void (*signal(int sig, void (*func)(int)))(int)
参数 (Parameters)
sig - 这是设置处理功能的信号编号。 以下是一些重要的标准信号编号 -
Sr.No. | 宏观和信号 |
---|---|
1 | SIGABRT (信号中止)异常终止,例如由功能启动。 |
2 | SIGFPE (信号浮点异常)错误的算术运算,例如零分频或导致溢出的运算(不一定是浮点运算)。 |
3 | SIGILL (信号非法指令)无效的功能图像,例如非法指令。 这通常是由于代码中的损坏或尝试执行数据。 |
4 | SIGINT (信号中断)交互式注意信号。 通常由应用程序用户生成。 |
5 | SIGSEGV (信号分段违规)对存储的无效访问 - 当程序试图在内存之外读取或写入时,会为其分配。 |
6 | SIGTERM (信号终止)发送到程序的终止请求。 |
func - 这是一个指向函数的指针。 这可以是程序员定义的函数,也可以是以下预定义函数之一 -
Sr.No. | 功能说明 |
---|---|
1 | SIG_DFL 默认处理 - 信号由该特定信号的默认操作处理。 |
2 | SIG_IGN 忽略信号 - 忽略信号。 |
返回值 (Return Value)
此函数返回信号处理程序的先前值,或者出错时的SIG_ERR。
例子 (Example)
以下示例显示了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...