fbpx
维基百科

signal.h

signal.hC标准函数库中的信号处理部分, 定义了程序执行时如何处理不同的信号。信号用作进程间通信, 报告异常行为(如除零)、用户的一些按键组合(如同时按下Ctrl与C键,产生信号SIGINT)。

C++中的对应头文件是csignal

标准信号 编辑

C语言标准定义了6个信号。都定义在signal.h头文件中[1]

  • SIGABRT - 异常中止。
  • SIGFPE - 浮点异常。
  • SIGILL - 无效指令。
  • SIGINT - 交互的用户按键请求,默认情况下,这会导致进程终止。
  • SIGSEGV - 无效内存访问。
  • SIGTERM - 程序的中止请求。

signal.h可能还定义了其它信号,这依赖于具体实现。例如,类Unix系统还定义了15个以上的信号[2]Visual C++的C标准库只支持C语言标准规定的6个信号,即对信号处理只提供最小的支持。

信号处理 编辑

库函数raise()或者系统调用kill()可以产生信号。raise()发送一个信号给当前进程,kill()发送一个信号给特定进程。

除了两个信号SIGKILL与SIGSTOP不能被捕获(caught)、阻塞(blocked)或者忽略,其它的信号都可以指定处理函数(handler)。一个信号的处理函数在信号到达时,被目标环境调用。目标环境挂起当前进程的执行,直到信号处理函数返回或者调用了longjmp()。为了最大的兼容性,异步信号处理只应:

  • 成功调用了signal()指定的函数;
  • 给类型为sig_atomic_t的对象赋值;
  • 把控制返回给它的调用者。

如果信号报告了进程的错误,信号处理函数应该调用abort(), exit()longjmp()

函数 编辑

函数 描述
raise 人工抛出一个信号
signal 当程序收到特定信号时应该执行的处理函数

例子 编辑

#include <signal.h> #include <stdio.h> #include <stdlib.h> static void catch_function(int signal) {  puts("Interactive attention signal caught."); } int main(void) {  if (signal(SIGINT, catch_function) == SIG_ERR) {  fputs("An error occurred while setting a signal handler.\n", stderr);  return EXIT_FAILURE;  }  puts("Raising the interactive attention signal.");  if (raise(SIGINT) != 0) {  fputs("Error raising the signal.\n", stderr);  return EXIT_FAILURE;  }  puts("Exiting.");  return 0; } 

参见 编辑

参考文献 编辑

  1. ^ (PDF). . p. 258, § 7.14 Signal handling [2012-11-06]. (原始内容 (PDF)存档于2011-01-24). 
  2. ^ . [10 January 2012]. (原始内容存档于2012-12-12). 

外部链接 编辑

    signal, 是c标准函数库中的信号处理部分, 定义了程序执行时如何处理不同的信号, 信号用作进程间通信, 报告异常行为, 如除零, 用户的一些按键组合, 如同时按下ctrl与c键, 产生信号sigint, 中的对应头文件是csignal, 目录, 标准信号, 信号处理, 函数, 例子, 参见, 参考文献, 外部链接标准信号, 编辑c语言标准定义了6个信号, 都定义在头文件中, sigabrt, 异常中止, sigfpe, 浮点异常, sigill, 无效指令, sigint, 交互的用户按键请求, 默认情况下,. signal h是C标准函数库中的信号处理部分 定义了程序执行时如何处理不同的信号 信号用作进程间通信 报告异常行为 如除零 用户的一些按键组合 如同时按下Ctrl与C键 产生信号SIGINT C 中的对应头文件是csignal 目录 1 标准信号 2 信号处理 3 函数 4 例子 5 参见 6 参考文献 7 外部链接标准信号 编辑C语言标准定义了6个信号 都定义在signal h头文件中 1 SIGABRT 异常中止 SIGFPE 浮点异常 SIGILL 无效指令 SIGINT 交互的用户按键请求 默认情况下 这会导致进程终止 SIGSEGV 无效内存访问 SIGTERM 程序的中止请求 signal h可能还定义了其它信号 这依赖于具体实现 例如 类Unix系统还定义了15个以上的信号 2 Visual C 的C标准库只支持C语言标准规定的6个信号 即对信号处理只提供最小的支持 信号处理 编辑库函数raise 或者系统调用kill 可以产生信号 raise 发送一个信号给当前进程 kill 发送一个信号给特定进程 除了两个信号SIGKILL与SIGSTOP不能被捕获 caught 阻塞 blocked 或者忽略 其它的信号都可以指定处理函数 handler 一个信号的处理函数在信号到达时 被目标环境调用 目标环境挂起当前进程的执行 直到信号处理函数返回或者调用了longjmp 为了最大的兼容性 异步信号处理只应 成功调用了signal 指定的函数 给类型为sig atomic t的对象赋值 把控制返回给它的调用者 如果信号报告了进程的错误 信号处理函数应该调用abort exit 或longjmp 函数 编辑函数 描述raise 人工抛出一个信号signal 当程序收到特定信号时应该执行的处理函数例子 编辑 include lt signal h gt include lt stdio h gt include lt stdlib h gt static void catch function int signal puts Interactive attention signal caught int main void if signal SIGINT catch function SIG ERR fputs An error occurred while setting a signal handler n stderr return EXIT FAILURE puts Raising the interactive attention signal if raise SIGINT 0 fputs Error raising the signal n stderr return EXIT FAILURE puts Exiting return 0 参见 编辑信号 计算机科学 参考文献 编辑 ISO IEC 9899 1999 specification PDF p 258 7 14 Signal handling 2012 11 06 原始内容 PDF 存档于2011 01 24 The Open Group Base Specifications Issue 6 signal h signals 10 January 2012 原始内容存档于2012 12 12 外部链接 编辑XGC s manual for signal h 取自 https zh wikipedia org w index php title Signal h amp oldid 63145188, 维基百科,wiki,书籍,书籍,图书馆,

    文章

    ,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。