信号处理篇

参考了 wget , linux c编程实战中的bt下载软件 , nginx三者中的信号处理方法。都是采用 signal(signo,handler)

 

wget,bt下载软件,使用 signal 函数

signal(signo,signal_handler);

signo 信号处理代码  int

signal_handler 信号处理函数  void (*)(int)

返回值:若成功,指向在此之前的信号处理函数的指针;若出错,SIG_ERR

 

nginx,使用 sigaction 函数,实现和 signal 一样的功能

1
2
3
4
5
struct sigaction sa;    //定义结构体sa
memset(&sa, 0, sizeof(struct sigaction));   //置零sa
sa.sa_hander = signal_hander;   //设置信号处理函数,同signal函数中的signal_handler
sigemptyset(sa.sa_mask);    //清空sa中的信号集
sigaction(signo, &sa, NULL);  //成功返回 0 ,出错返回 -1

  

信号处理函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <signal.h>
 
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
 
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
 
    struct sigaction {
        void     (*sa_handler)(int);
        void     (*sa_sigaction)(int, siginfo_t *, void *);
        sigset_t   sa_mask;
        int        sa_flags;
        void     (*sa_restorer)(void);
    };

  

信号集处理函数

1
2
3
4
5
6
7
8
9
10
11
       #include <signal.h>
 
       int sigemptyset(sigset_t *set);  ///初始化信号集,并清空
 
       int sigfillset(sigset_t *set);  ///初始化信号集,并使其包括所有信号
 
       int sigaddset(sigset_t *set, int signum);  ///信号集中添加信号signum
  
       int sigdelset(sigset_t *set, int signum);  ///信号集中删除信号signum
<br>      ///以上四个函数,成功返回 0,出错返回 -1
       int sigismember(const sigset_t *set, int signum);  ///测试信号signum是否在信号集中,在返回1,不在返回0

  

 

posted @   湛雷冲  阅读(342)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示