C:signal信号

转载自: http://blog.csdn.net/pdcxs007/article/details/11473989

  在C语言中,对于错误有很多处理方式。然而,今天学习了信号处理,感觉这种处理方式十分灵活,特此记录。

  关于信号处理的函数包含于头文件<signal.h>中。所谓的信号,多指出乎程序员意料的行为,包括程序本身的行为(即错误)和用户的行为。当有错误或者外部事件发生时,我们称产生了一个信号。

signal.h中定义了若干宏与相应的信号对应,比较常用的有:

宏名 含义
SIGABRT 异常终止
SIGFPE 在算术运算中发生错误
SIGILL 无效指令
SIGINT 中断
SIGSEGV 无效存储访问
SIGTERM 终止请求

 

其中,signal函数用于处理信号,将相应的信号和自己编写的函数关联,达到执行相应指令的目的。有点类似于事件侦听器。原型如下:

 1 void (*signal(ing sig, void (*func)(int)))(int); 

 

用法如下:

 1 signal (SIGINT, handler); 

另外,raise函数可以手工地产生一个信号,用法如下:

 1 raise(SIGABRT); // raises the SIGABRT signal. 

 

示例程序:

/* tsignal.c
 * To test signals.
 * By Eric Brown
 */

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

void handler(int sig);

int main(void)
{
    signal(SIGFPE, handler);
    
    int x, y, result;
    printf("Please input two integer: ");
    
    scanf("%d%d", &x, &y);
    result = x / y;
    
    //signal(SIGABRT, handler);
    raise(SIGABRT);
    
    printf("Program run here!\n");
    return 0;
}

void handler(int sig)
{
    if (sig == SIGFPE)
    {
        printf("We get a SIGFPE signal.\n");
        exit (EXIT_FAILURE);
    }
    if (sig == SIGABRT)
    {
        printf("We get a SIGABRT signal.\n");
    }
}

 

posted @ 2014-04-03 12:57  hedgehog小子  阅读(211)  评论(0)    收藏  举报