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


C语言 signal用法及代码示例


C语言signal头文件(signal.h)中signal函数的用法及代码示例。

用法:

void (*signal(int sig, void (*func)(int)))(int);
设置函数以处理信号
指定一种处理信号的方法信号号由指定sig

参数func指定程序可以处理信号的三种方式之一:
  • 默认处理(SIG_DFL):该信号由该特定信号的默认操作处理。
  • 忽略信号(SIG_IGN):该信号将被忽略,即使没有意义,代码也将继续执行。
  • 函数处理程序:定义了一个特定的函数来处理信号。

任何一个SIG_DFL或者SIG_IGN在程序启动时,对于每个受支持的信号,将其设置为默认的信号处理行为。

参数

sig
这个信号值设置了处理函数的对象。以下宏常量表达式标识标准信号值:

信号
SIGABRT(信号中止)异常终止,例如由abort函数。
SIGFPE(信号浮点异常)错误的算术运算,例如零除或导致溢出的运算(不一定是浮点运算)。
SIGILL(信号非法指令)无效的函数图像,例如非法指令。这通常是由于代码损坏或尝试执行数据所致。
SIGINT(信号中断)交互式注意信号。通常由应用程序用户生成。
SIGSEGV(违反信号分段)对存储的无效访问:当程序尝试在已分配的内存之外进行读取或写入时。
SIGTERM(信号终止)终止请求已发送至程序。

每个库的实现可能会提供额外的信号值可以与此函数一起使用的宏常量。

请注意,并非所有运行环境都需要生成自动信号,即使在上述特定情况下也是如此,尽管所有运行环境都必须将通过显式调用生成的信号传递给raise函数。
func
指向函数的指针。这可以是程序员定义的函数,也可以是以下预定义函数之一:

SIG_DFL默认处理:该信号由该特定信号的默认操作处理。
SIG_IGN忽略信号:信号被忽略。

如果是函数,则应遵循以下原型(带有C链接):
 
void handler_function (int parameter);


返回值

返回类型与参数类型相同func

如果请求成功,则该函数返回指向特定处理程序函数的指针,该函数负责在调用之前处理该信号(如果有)。或是SIG_DFL或者SIG_IGN如果在调用之前,信号分别由默认处理程序处理或被忽略。

如果该函数未成功注册新的信号处理过程,则返回SIG_ERRerrno可以设置为正值。

示例

/* signal example */
#include <stdio.h>      /* printf */
#include <signal.h>     /* signal, raise, sig_atomic_t */

sig_atomic_t signaled = 0;

void my_handler (int param)
{
  signaled = 1;
}

int main ()
{
  void (*prev_handler)(int);

  prev_handler = signal (SIGINT, my_handler);

  /* ... */
  raise(SIGINT);
  /* ... */
  
  printf ("signaled is %d.\n",signaled);
  

  return 0;
}
signaled is 1.





注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C signal function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。