int sigfillset(sigset_t *set); //包括所有信号
int sigaddset(sigset_t *set, int signum); //设置一个信号位
int sigdelset(sigset_t *set, int signum); //删除一个信号位
int sigismember(const sigset_t *set, int signum); // 真返回1 假返回0
sigset_t 为信号集变量 前两个函数为初始化函数 中间的为修改函数 最后一个为测试函数
前四个若成功返回 0 若出错返回-1
>>修改或检测进程的信号屏蔽字
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
oldset 作为返回值参数 若非空返回当前信号屏蔽字
set 用以修改信号屏蔽字 具体如何修改取决于how
how有三个参数
SIG_BLOCK 当前的信号屏蔽字与进程的信号屏蔽字的并集作为 进程新的信号屏蔽字 P=P|B set包含了希望加入的信号
SIG_UNBLOCK 当前的信号屏蔽字与进程的信号屏蔽字的补集的交集 作为进程新的信号屏蔽字 P = P & ~B set包含了希望解除的信号
SIG_SETMASK set作为进程新的信号屏蔽字
>>
int sigpending(sigset_t *set);
函数返回在送往进程的时候被阻塞挂起的信号集合
若成功 返回0 若出错 返回-1
>>在信号捕捉程序中进行非局部转移
int sigsetjmp(sigjmp_buf env, int savesigs);
void siglongjmp(sigjmp_buf env, int val);
当savesigs为非0时 sigsetjmp保存当前信号屏蔽字
siglongjmp若信号屏蔽字以保存 那么这个函数将根据保存的信号屏蔽字恢复信号屏蔽字 val为从siglongjmp函数执行后
sigsetjmp返回的值
注意: 在调用siglongjmp函数前应该用一种方法保证sigsetjmp是已经设定了 env