zoukankan      html  css  js  c++  java
  • #define SIG_DFL ((void(*)(int))0)

    在linux内的信号处理函数中,有#define SIG_DFL ((void(*)(int))0)和#define SIG_IGN ((void(*)(int))1)两个宏定义。要理解这两个宏定义,我们先要知道signal函数的运行机制。首先我们看看该函数的原型声明,如下:
    void (*signal (int signr,void (*handler)(int))) (int)


    signal函数有两个参数,一个是指定需要捕获的信号signr;另外一个是新的信号处理函数指针void (*handler)(int)。注意,新的信号处理句柄或者说是新的信号处理函数是一个无返回值且具有一个整型参数的函数指针,该整型参数用于当指定信号发生时,内核将其传递给处理句柄(也就是信号处理函数),理解这一点,对于我们理解上述两个宏定义很重要。

    signal函数中的信号处理函数handler,可以是用户指定的一个信号处理函数,也可以是内核特定的函数指针SIG_IGN或SIG_DFL。若信号句柄是SIG_IGN或SIG_DFL,则分别表示对捕获的信号采取忽略操作或者默认操作。


    从上面signal函数第二个参数的类型:无返回值且具有一个整型参数的函数指针,可知:信号句柄SIG_IGN或SIG_DFL也必须是无返回值且具有一个整型参数的函数指针。下面我只分析#define SIG_DFL ((void(*)(int))0)这个宏定义。


    我的理解是((void(*)(int))0)表示一个值为0的无返回值且具有一个整型参数的函数指针,void(*)(int)代表一个无返回值的且具有一个整型参数的函数指针类型(这里是一个空函数),整个语句表示将“0”强制类型转换为无返回值且具有一个整型参数的函数指针。


    注:0的意思是SIG_DFL这个常量的值,SIG_IGN为1,SIG_ERR为-1。

  • 相关阅读:
    [原创]NT系统信息察看工具 : NtInfoGuy
    [原创]obj-c编程17:键值观察(KVO)
    python使用django框架模板的基本使用
    mysql链接查询
    mysql数据库的增删改查
    python使用django创建项目详解
    python中sdk的使用 (一)
    unittest单元测试框架小白入门
    nosql数据库与sql数据库
    javascript数组的定义及基本操作详解
  • 原文地址:https://www.cnblogs.com/liulipeng/p/3555395.html
Copyright © 2011-2022 走看看