zoukankan      html  css  js  c++  java
  • C语言信号学习笔记

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

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

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

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


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

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

    用法如下:

    signal (SIGINT, handler);

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

    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!
    ");
        return 0;
    }
    
    void handler(int sig)
    {
        if (sig == SIGFPE)
        {
            printf("We get a SIGFPE signal.
    ");
            exit (EXIT_FAILURE);
        }
        if (sig == SIGABRT)
        {
            printf("We get a SIGABRT signal.
    ");
        }
    }

    运行效果如下:



  • 相关阅读:
    Java Output流写入包装问题
    SpringBoot项目单元测试不经过过滤器问题
    SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常
    JWT jti和kid属性的说明
    Maven 排除依赖
    第五章 基因概念的发现
    第三章 孟德尔遗传的拓展
    第二章 孟德尔遗传
    第一章 引言
    GWAS全基因组关联分析
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3310639.html
Copyright © 2011-2022 走看看