C 语言库函数 - signal()

返回上一级

C 语言标准库 <signal.h> 函数 void (signal(int sig, void (func)(int)))(int) 设置一个函数来处理信号,即带有 sig 参数的信号处理程序。

头文件

#include <signal.h>

函数原型

下面是 signal() 函数的原型

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

参数

  • sig:在信号处理程序中作为变量使用的信号码

下面是一些重要的标准信号常量

信号
SIGABRT (Signal Abort) 程序异常终止
SIGFPE (Signal Floating-Point Exception) 算术运算出错,如除数为 0 或溢出(不一定是浮点运算)
SIGILL (Signal Illegal Instruction) 非法函数映象,如非法指令,通常是由于代码中的某个变体或者尝试执行数据导致的
SIGINT (Signal Interrupt) 中断信号,如 ctrl-C,通常由用户生成
SIGSEGV (Signal Segmentation Violation) 非法访问存储器,如访问不存在的内存单元。
SIGTERM (Signal Terminate) 发送给本程序的终止请求信号
  • func: 一个指向函数的指针。 它可以是一个由程序定义的函数,也可以是下面预定义函数之一:
函数 说明
SIG_DFL 默认的信号处理程序
--- ---
SIG_IGN 忽视信号

返回值

该函数返回信号处理程序之前的值,当发生错误时返回 SIG_ERR

范例

下面的范例演示了 signal() 函数的用法

/**
 * file: main.c
 * author: 简单教程(www.twle.cn)
 *
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>

void sighandler(int);

int main()
{
   signal(SIGINT, sighandler);

   while(1) 
   {
      printf("wait 1s...\n");
      sleep(1);
   }

   return(0);
}

void sighandler(int signum)
{
   printf("捕获信号 %d,跳出...\n", signum);
   exit(1);
}

编译运行以上范例,输出如果如下

运行时程序会进入无限循环,需使用组合键 CTRL + C 键跳出程序

$ gcc main.c && ./a.out
wait 1s...
wait 1s...
wait 1s...
wait 1s...
wait 1s...
wait 1s...
wait 1s...
wait 1s...
wait 1s...
wait 1s...
^C捕获信号 2,跳出...

返回上一级

C 语言标准库

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.