• signal函数


    void (*signal(int signo, void (*fun(int))))(int)

    int (*p)();
    这是一个函数指针, p所指向的函数是一个不带任何参数, 并且返回值为int的一个函数.
    int (*fun())();
    这个式子与上面式子的区别在于用fun()代替了p,而fun()是一个函数,所以说就可以看成是fun()这个函数执行之后,它的返回值是一个函数指针,这个函数指针(其实就是上面的p)所指向的函数是一个不带任何参数,并且返回值为int的一个函数.所以说对于

    void (*signal(int signo, void (*fun)(int)))(int);

    就可以看成是signal()函数(它自己是带两个参数,一个为整型,一个为函数指针的函数), 而这个signal()函数的返回值也为一个函数指针,这个函数指针指向一个带一个整型参数,并且返回值为void的一个函数.
    signal函数返回的其实是指向以前的信号处理程序的指针,

    void (*signal(int signo, void (*fun(int))))(int)
    signal信号处理函数原型,signal有两个参数,一个整形,一个是有一个整形参数的func函数返回的void类型,这个函数返回一个指针,指向可以咯有一个int参数的函数并且返回一个void类型的值,这个函数太复杂,本身没有意义,一般都是用typedef之后的简单的信号处理函数

    利用signal()函数与alarm()函数,实现在主程序中安一定的时间间隔运行另一个进程

    先说一下signal()这个函数.
    unix信号signal定义
    #include <signal.h>
    void (*signal(int signo,void(*fun)(int)))(int)

    说明:1 返回值是一个 void (*)(int)类型的函数指针
             2 signo是信号名
             3 第二个参数为该信号的处理函数指针,类型为void (*)(int)

          SIG_IGN 忽略参数signum指定的信号。

          SIG_DFL 将参数signum 指定的信号重设为核心预设的信号处理方式。
             4 函数返回:成功则返回以前的信号处理配置函数指针,出错返回SIG_ERR
             5 SIG_ERR原形为 #define SIG_ERR (void (*)())-1

    #define SIG_ERR  (void (*)())-1
    #define SIG_DFL   (void (*)())0
    #define SIG_IGN   (void (*)())1
    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    static void sig_usr(int);
    
    int main(int argc, char *argv[])
    {
        if (signal(SIGUSR1, sig_usr) == SIG_ERR)
            printf("can't catch SIGUSR1
    ");
        if (signal(SIGUSR2, sig_usr) == SIG_ERR)
            printf("can't catch SIGUSR2
    ");
        while (1)
            pause();
    
        return 0;
    }
    
    static void sig_usr(int signo)
    {
        if (signo == SIGUSR1)
            printf("received SIGUSR1
    ");
        else if (signo == SIGUSR2)
            printf("received SIGUSR2
    ");
        else
            printf("received signal %d
    ", signo);
    }
  • 相关阅读:
    Linux直接在通过终端打开图片文件
    【暑假】[实用数据结构]UVa11995 I Can Guess the Data Structure!
    【暑假】[实用数据结构]动态范围查询问题
    【暑假】[实用数据结构]范围最小值问题(RMQ)
    【暑假】[实用数据结构]动态连续和查询问题
    【暑假】[基本数据结构]基本的数据结构知识点总结梳理
    【暑假】[基本数据结构]根据in_order与post_order构树
    【暑假】[基本数据结构]根据BFS与DFS确定树
    【暑假】[网络流]网络流知识总结
    [HDOJ2546] 饭卡 (01背包)
  • 原文地址:https://www.cnblogs.com/yyxayz/p/4073053.html
Copyright © 2020-2023  润新知