目录

void (*signal(int sig, void (*func)(int)))(int)

描述 (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...
↑回到顶部↑
WIKI教程 @2018