英文原文:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.9.html
原文作者:Eric Huss
中文译者:柳惊鸿 Poechant
版权声明:本文的原文版权归Eric Huss所有,中文译文版权归Poechant所有。转载请注明来自"柳大的CSDN博客":http://blog.csdn.net/poechant
9. signal.h
头文件signal处理程序运行时产生的信号的方法。
宏:
SIG_DFL
SIG_ERR
SIG_IGN
SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM
函数:
signal();
raise();
变量:
typedef sig_atomic_t
9.1. 变量和定义
类型sig_atomic_t就是int,作为signal函数的handler中的变量。SIG_宏用于signal函数中用于定义信号函数。
SIG_DFL |
默认handler。 |
SIG_ERR |
表示错误信号。 |
SIG_IGN |
忽略信号。 |
SIG宏代表下列情况下的信号编号。
SIGABRT |
异常终止(由abort函数产生)。 |
SIGFPE |
浮点错误(由零除运行、不合理操作产生)。 |
SIGILL |
非法操作(指令)。 |
SIGINT |
交互信号(比如我们熟悉的Ctrl-C)。 |
SIGSEGV |
非法存储访问(段错误,内存错误)。 |
SIGTERM |
终止请求。 |
9.2. signal
声明:
void (*signal(int sig, void (*func)(int)))(int);
该函数管理一个信号应该如何被操控。sig代表与SIG宏相容的信号编号。func函数会在信号产生时被调用。如果函数是SIG_DFL,则调用默认的handler。如果func是SIG_IGN,则信号被忽略。如果func指向一个函数,那么当检测到一个信号并执行默认handler时,该函数会被调用。函数必须携带一个int参数代表信号编号。函数可能被return,abort,exit,或者longjmp终止。当函数终止时,程序继续从中断处执行(除非是结果未定义的信号SIGFPE)。
如果信号调用成功,则返回指向之前特定信号类型的handler的指针。如果信号调用失败,则返回SIG_ERR并且将errno设置一个合理值。
9.3. raise
声明:
int raise(intsig);
产生sig信号。sig参数要与SIG宏兼容。
如果调用成功,会返回0。否则返回非零值。
实例:
#include<signal.h>
#include<stdio.h>
void catch_function(int);
int main(void)
{
if(signal(SIGINT, catch_function)==SIG_ERR)
{
printf("An error occured while setting a signal handler.\n");
exit(0);
}
printf("Raising the interactive attention signal.\n");
if(raise(SIGINT)!=0)
{
printf("Error raising the signal.\n");
exit(0);
}
printf("Exiting.\n");
return 0;
}
void catch_function(int signal)
{
printf("Interactive attention signal caught.\n");
}
程序运行输出结果(假设没有错误):
Raising the interactive attention signal.
Interactive attention signal caught.
Exiting.
该系列译文在持续更新中⋯⋯
C标准库参考指南系列译文(1)assert.h
C标准库参考指南系列译文(2)ctype.h
C标准库参考指南系列译文(3)errno.h
C标准库参考指南系列译文(4)float.h
C标准库参考指南系列译文(5)limits.h
C标准库参考指南系列译文(6)locale.h
C标准库参考指南系列译文(7)math.h
C标准库参考指南系列译文(8)setjmp.h
C标准库参考指南系列译文(9)signal.h
C标准库参考指南系列译文(10)stdarg.h
C标准库参考指南系列译文(11)stddef.h
C标准库参考指南系列译文(12)stdio.h(A)
版权声明:本文的原文版权归Eric Huss所有,中文译文版权归Poechant所有。转载请注明来自"柳大的CSDN博客":http://blog.csdn.net/poechant
-