Home C&C++函数库 c++ 语法 程序源码 Linux C库

signal

函数   <csignal>

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_ERR, errno可能被设置为正值。

☣  示例



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

↭  数据竞争



Undefined:在多线程程序中调用此函数将导致未定义的行为。

➤  异常(C++)



无抛出保证:此函数从不抛出异常。

🍄  另请参阅


raise 生成一个信号(函数)


联系我们 免责声明 关于CandCplus 网站地图