zoukankan      html  css  js  c++  java
  • sigaction

    概述编辑

    sigaction(查询或设置信号处理方式)
    相关函数 signal,sigprocmask() ,sigpendingsigsuspendsigemptyset
    表头文件 #include<signal.h>
    定义函数 int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);
    函数说明 sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。
    如参数结构sigaction定义如下
    struct sigaction {
    void (*sa_handler)(int);
    void (*sa_sigaction)(int, siginfo_t *, void *);
    sigset_t sa_mask;
    int sa_flags;
    void (*sa_restorer)(void);
    }
    信号处理函数可以采用void (*sa_handler)(int)或void (*sa_sigaction)(int, siginfo_t *, void *)。到底采用哪个要看sa_flags中是否设置了SA_SIGINFO位,如果设置了就采用void (*sa_sigaction)(int, siginfo_t *, void *),此时可以向处理函数发送附加信息;默认情况下采用void (*sa_handler)(int),此时只能向处理函数发送信号的数值。
    sa_handler此参数和signal()的参数handler相同,代表新的信号处理函数,其他意义请参考signal()。
    sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号集搁置。
    sa_restorer 此参数没有使用。
    sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。
    sa_flags还可以设置其他标志:
    SA_RESETHAND:当调用信号处理函数时,将信号的处理函数重置为缺省值SIG_DFL
    SA_RESTART:如果信号中断了进程的某个系统调用,则系统自动启动该系统调用
    SA_NODEFER :一般情况下, 当信号处理函数运行时,内核将阻塞该给定信号。但是如果设置了 SA_NODEFER标记, 那么在该信号处理函数运行时,内核将不会阻塞该信号[1] 
    sigaction

    2示例编辑

    #include <signal.h>
    #include <unistd.h>
    #include <stdio.h>
    static void int_hander(int s)
    {
    printf("Catch a signal sigint ");
    }
    int
    main(void)
    {
    int i;
    struct sigaction act, oact;
    act. sa_handler = int_hander;
    sigemptyset(&act. sa_mask); //清空此信号集
    act. sa_flags = 0;
    sigaction(SIGINT, &act, &oact);
    //signal(SIGINT, SIG_IGN);
    while(1){
    for(i=0; i<5; i++){
    write(1, ".", 1);
    sleep(1);
    }
    write(1, " ", 1);
    }
    sigaction(SIGINT, &oact, NULL); //恢复成原始状态
    return 0;
    }
  • 相关阅读:
    Practice2_vector_sort_struct
    a demo of vector of STL
    抽象漏洞原则
    不是抽象的漏洞,而是本质复杂性
    2017中国大学生程序设计竞赛
    2017中国大学生程序设计竞赛
    2017中国大学生程序设计竞赛
    2017中国大学生程序设计竞赛
    2017多校第8场 HDU 6134 Battlestation Operational 莫比乌斯反演
    2017多校第5场 HDU 6085 Rikka with Candies bitset
  • 原文地址:https://www.cnblogs.com/lidabo/p/4581215.html
Copyright © 2011-2022 走看看