zoukankan      html  css  js  c++  java
  • 信号处理函数(3)-sigaction() 为信号注册信号捕捉函数

    定义:

    int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);

     

    表头文件:

    #include<signal.h>

     

    说明:

    sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。

    如参数结构sigaction定义如下

    struct sigaction

    {

    void (*sa_handler) (int);

    sigset_t sa_mask;

    int sa_flags;

    void (*sa_restorer) (void);

    }

     

    sa_handler: 函数指针,指定当信号到来时由哪个函数来处理,函数原型为 void foo(int);

    sa_mask: 临时屏蔽字,在处理信号时,屏蔽哪些信号。

    sa_flags 用来设置信号处理的其他相关操作, 可设置为0

     

    返回值:

    执行成功则返回0, 如果有错误则返回-1。

     

    示例:

    #include <stdio.h>
    #include <unistd.h>
    #include <signal.h>
    
    
    void recv_sig(int num)
    {
        int n = 5;
        printf("I have received a signal
    ");
        while(n--) {
            printf("num = %d
    ", num);
            sleep(1);
        }
    }
    
    
    int main()
    {
        struct sigaction act;
        act.sa_handler = recv_sig;
        sigemptyset(&act.sa_mask);
        // 当处理SIGUSR1信号时,暂时屏蔽SIGQUIT信号
        sigaddset(&act.sa_mask, SIGQUIT);
        act.sa_flags = 0;
    
        sigaction(SIGUSR1, &act, NULL);
    
        while(1) {
            printf("*************
    ");
            sleep(1);
        }
        return 0;
    }

     运行结果:

    yongdaimi@iMac:~/Documents/code$ ./app
    *************
    *************
    *************
    *************
    *************
    *************
    *************
    *************
    *************
    *************
    *************
    *************
    *************
    *************
    *************
    I have received a signal
    num = 10
    num = 10
    num = 10
    ^ um = 10
    num = 10
    退出 (核心已转储) 

     

     

     

  • 相关阅读:
    第二周c语言PTA作业留
    2018第零次作业
    总结报告
    第14/15周作业
    第七周作业
    第六周作业
    第四次作业
    第三次作业
    大学第二次作业
    大学的第一次作业
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/8178737.html
Copyright © 2011-2022 走看看