zoukankan      html  css  js  c++  java
  • 头文件<signal.h>

    头文件<signal.h>为处理各种各样的信号声明了一个类型和两个函数,并且定义了几个宏。

    1、类型:sig_atomic_t

    sig_atomic_t是 int 类型,在信号处理程序中作为变量使用。它是一个对象的整数类型,该对象可以作为一个原子实体访问,即使存在异步信号时,该对象可以作为一个原子实体访问。

    2、宏:

    SIG_DFL  默认的信号处理。

    SIG_ERR  表示一个信号错误。

    SIG_IGN  表示忽略信号。

    有效的信号包括:

    SIGABRT  异常终止,如调用abort()。

    SIGFPE  算术运算出错,如除数为0或溢出。

    SIGILL  非法函数映象,如非法指令。

    SIGINT  交互式信号,如中断。

    SIGSEGV  非法访问存储器,如访问不存在的内存单元。

    SIGTERM  发送给本程序的终止请求信号。

    3、函数:

    3.1函数signal

    void (*signal(int sig,void (*handle)(int)))(int);

    说明:signal()用于确定以后当信号sig出现时的处理方法。

    参数:如果handler的值是SIG_DFL,那么就采用实现定义的缺省行为;如果handler的值是SIG_IGN,那么就忽略该信号;否则,调用handler所指向的函数(参数为信号类型)。

    返回值:signal()返回信号sig原来的handler;如果出错,则返回SIG_ERR。

    当随后出现信号sig时,就中断正在执行的操作,转而执行信号处理函数(*handler)(sig)。如果从信号处理程序中返回,则从中断的位置继续执行。

    3.2函数raise

    int raise(int sig);

    说明:函数raise把信号sig发送给正在执行的程序。

    返回值:执行成功返回0,不成功返回非0。

    例:

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

    static int sigs[]={SIGABRT,SIGFPE,SIGILL,SIGINT,SIGSEGV,SIGTERM};
    static void (*rets[])(int)={SIG_DFL,SIG_ERR,SIG_IGN};
    static sig_atomic_t atomic;

    static void field_fpe(int sig)
    {
    assert(sig==SIGFPE);
    puts("success testing <signal.h>");
    exit(EXIT_SUCCESS);
    }

    int main()
    {
    printf("sizeof (sig_atomic_t) = %u ",sizeof(sig_atomic_t));
    assert(signal(SIGFPE,&field_fpe)==SIG_DFL);  //signal设置SIGFPE信号发生后的处理函数并返回信号处理程序之前的值
    assert(signal(SIGFPE,&field_fpe)==&field_fpe);  //判断信号处理函数是否设置成功
    raise(SIGFPE);  //发送SIGFPE信号
    puts("fail testing <signal.h>");
    return (EXIT_FAILURE);
    }

    执行结果:

    sizeof (sig_atomic_t) = 4
    success testing <signal.h>

  • 相关阅读:
    docker常用命令
    docker安装注意事项
    DataGridView中实现自动编号
    Flask设置配置文件
    python路径找类并获取静态字段
    JavaScript数据类型
    php学习笔记6
    php学习笔记5
    php学习笔记4
    php学习笔记3
  • 原文地址:https://www.cnblogs.com/Mr-Wenyan/p/7220755.html
Copyright © 2011-2022 走看看