C标准库参考指南系列译文(9)signal.h

时间:2022-02-13 14:13:07

英文原文: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。如果funcSIG_IGN,则信号被忽略。如果func指向一个函数,那么当检测到一个信号并执行默认handler时,该函数会被调用。函数必须携带一个int参数代表信号编号。函数可能被returnabortexit,或者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

-