惯例分析函数之前先看数据构造
信号相关数据结构
#define _NSIG 64
#define _NSIG_BPW 32
#define _NSIG_WORDS (_NSIG / _NSIG_BPW)
typedef struct {
unsigned long sig[_NSIG_WORDS];//你猜_NSIG_WORDS这个是多少? 每位表示一个信号
} sigset_t;
struct sigpending {
struct list_head list; //这个就是挂起信号的链表头,指向的成员就是sigqueue
sigset_t signal; //表示挂起信号的标志,
};
sigset_t 操作函数很有用的,后面分析代码会涉及很多这些操作函数的调用
void sigemptyset(sigset_t *set)和void sigfillset(sigset_t *set)分别是重置为1/0,这个是全部初始化。
void sigaddset(sigset_t *set, int _sig)和void sigaddset(sigset_t *set, int _sig)这两个内联函数大家应该能猜到,就是设置指定位为1/0。
void sigaddsetmask(sigset_t *set, unsigned long mask)和static inline void sigdelsetmask(sigset_t *set, unsigned long mask) 这两个内联函数根据mask值设置对应的位为1/0。
int sigismember(sigset_t *set, int _sig) 这个就是返回对应位置的信号值也就是判断是否存在sig挂起信号。
sigmask(sig) 信号位索引
signal_pending(struct ta