C 标准库 signal.h

   signal.h头文件定义了一个变量类型sig_atomic_t、两个函数调用和一些宏来处理程序执行期间报告的不同信号。

库变量

库宏

    SIG宏用于表示以下各种条件的信号码:

库函数

  void (*signal(int sig, void (*func)(int)))(int):该函数设置一个函数来处理信号,即带有sig参数的信号处理程序。

参数

  ·sig -- 在信号处理程序中作为变量使用的信号码。下面是一些重要的标准信号常量:

  ·func -- 一个指向函数的指针。它可以是一个由程序定义的函数,也可以是下面预定义函数之一:

返回值

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

实例

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

void sighandler(int);

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

   while(1) 
   {
      printf("开始休眠一秒钟...\n");
      sleep(1);
   }

   return(0);
}

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

  让我们编译并运行上面的程序,这将产生以下结果,且程序会进入无限循环,需使用Ctrl+C键跳出程序。

开始休眠一秒钟...
开始休眠一秒钟...
开始休眠一秒钟...
开始休眠一秒钟...
开始休眠一秒钟...
捕获信号 2,跳出...

 int raise(int sig):该函数会促使生产信号sig。sig参数和SIG宏兼容。

 

参数

  ·sig--要发送的信号码。下面是一些重要的标准信号常量:

返回值

  如果成功该函数返回零,否则返回非零。

实例

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

void signal_catchfunc(int);

int main()
{
    int ret;

   ret = signal(SIGINT, signal_catchfunc);

   if( ret == SIG_ERR) 
   {
      printf("错误:不能设置信号处理程序。\n");
      exit(0);
   }
   printf("开始生成一个信号\n");
   ret = raise(SIGINT);
   if( ret !=0 ) 
   {
      printf("错误:不能生成 SIGINT 信号。\n");
      exit(0);
   }

   printf("退出...\n");
   return(0);
}

void signal_catchfunc(int signal)
{
   printf("!! 信号捕获 !!\n");
}

   让我们编译并运行上面的程序,这将产生以下结果:

 

开始生成一个信号
!! 信号捕获 !!
退出...
 

 

参考:

https://www.yuque.com/docs/share/6e9be628-3d3c-4dca-aa10-c710840bb4c9

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值