• 信号处理之signal 函数笔记


    表头文件 #include<signal.h>

    功 能: 设置某一信号的对应动作

    函数原型 :void (*signal(int signum,void(* handler)(int)))(int);

    或者:typedef void(*sig_t) ( int );

    sig_t  signal ( int signum ,  sig_t  handler);    (sig_t  表示 “指向函数的指针” 这一种数据类型)

    参数说明:

    第一个参数signum指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。

    第二个参数handler描述了与信号关联的动作,它可以取以下三种值:

    (1)一个返回值为正数的函数地址

    此函数必须在signal()被调用前申明,handler中为这个函数的名字。当接收到一个类型为sig的信号时,就执行handler 所指定的函数。这个函数应有如下形式的定义:

    int func(int sig);

    sig是传递给它的唯一参数。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行func()函数。当func()函数执行结束后,控制权返回进程被中断的那一点继续执行。

    (2)SIGIGN

    这个符号表示忽略该信号,执行了相应的signal()调用后,进程会忽略类型为sig的信号。

    (3)SIGDFL

    这个符号表示恢复系统对信号的默认处理。

    理解:

    重要是理解指向函数的指针,其一般定义形式为:  数据类型 ( * 指针变量名 )( 函数参数表列 )

    void ( *signal() )( int );

    signal是一个函数, 它返回一个函数指针, 后者所指向的函数接受一个整型参数 且没有返回值, 仔细看, 是不是siganal( int signo, void (*handler)(int) )的第2个参数了, 对了, 其实他所返回的就是 signal的第2个信号处理函数, 指向信号处理函数, 就可以执行函数了( signal内部时, signal把信号做为参数传递给handler信号处理函数, 接着 signal 函数返回指针, 并且又指向信号处理函数, 就开始执行它)

    其实调用signal函数时只是给第一个参数一个信号量,然后signal 函数通过此信号量得到一个int类型值,再传给signal第二个参数(即信号处理函数)去执行。

    参考:百科 http://baike.baidu.com/view/64630.htm

    博客 http://blog.sina.com.cn/s/blog_6038fae80100mmmr.html

  • 相关阅读:
    改善用户体验之alert提示效果
    用javascript制作放大镜放大图片
    window.history.go(1)返回上页的同时刷新"上页"技术
    JS折叠菜单
    懒得勤快的博客 resharper 等好文
    IBM DOMINO LOTUS LIMITS
    为CKEditor开发FLV视频播放插件
    Calling DLL routines from LotusScript. Part I: Windows API
    lotus domino下使用FCKeditor
    domino文件拆离数据库,放入指定目录
  • 原文地址:https://www.cnblogs.com/maliqian/p/2290814.html
Copyright © 2020-2023  润新知