当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 signal()用法及代码示例



描述

C库函数void (*signal(int sig, void (*func)(int)))(int)设置处理信号的函数,即具有信号编号的信号处理程序sig

声明

以下是 signal() 函数的声明。

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

参数

  • sig− 这是设置处理函数的信号编号。以下是一些重要的标准信号编号 -

不。 宏和信号
1

SIGABRT

(Signal Abort) 异常终止,例如由函数发起。

2

SIGFPE

(信号浮点异常)错误的算术运算,例如零除或导致溢出的运算(不一定是浮点运算)。

3

SIGILL

(信号非法指令)无效的函数图像,例如非法指令。这通常是由于代码损坏或尝试执行数据所致。

4

SIGINT

(信号中断)交互式注意信号。通常由应用程序用户生成。

5

SIGSEGV

(Signal Segmentation Violation) Invalid access to storage - 当程序试图在内存之外读取或写入时,它会被分配给它。

6

SIGTERM

(信号终止)终止请求已发送至程序。

  • func- 这是一个指向函数的指针。这可以是程序员定义的函数或以下预定义函数之一 -

不。 函数说明
1

SIG_DFL

默认处理 - 信号由该特定信号的默认操作处理。

2

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...

相关用法


注:本文由纯净天空筛选整理自 C library function - signal()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。