改进的捕获信号机制

sigaction函数的功能是检查或修改与指定信号相关联的处理动作,该函数取代了signal函数。

#include <signal.h>

int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);

成功返回0,失败返回-1。
 
参数signo是要检测或者修改其具体动作的信号编号(或同时执行这两种操作)。
如果act指针非空,则要修改其动作。
如果oact指针非空,则系统由oact指针返回该信号的上一个动作。

 struct sigaction {

  void (*sa_handler)(int);

  void (*sa_sigaction)(int, siginfo_t *, void *);

  sigset_t sa_mask;

  int sa_flags;

  void (*sa_restorer)(void);

}

sigaction函数例子
void catch_Signal(int Sign)
{
    switch (Sign)
    {
    case SIGINT:
        printf("SIGINT Signal
");
        exit(0);
    }
}
int signal1(int signo, void (*func)(int))
{
    struct sigaction act, oact;
    act.sa_handler = func;
    sigemptyset(&act.sa_mask);
    act.sa_flags = 0;
    return sigaction(signo, &act, &oact);
}
int main(int arg, char *args[])
{
    signal1(SIGINT, catch_Signal);
    pause();
    return 0;
}
原文地址:https://www.cnblogs.com/shichuan/p/4496340.html