防止信号处理失灵
2007-03-15 21:55:10 来源:WEB开发网核心提示: POSIX 信号POSIX 信号处理函数操作一组打包在 sigset_t 数据类型中信号: int sigemptyset(sigset_t * pset); 清除 pset 中的所有信号, int sigfillset(sigset_t * pset); 用可获得的信号填充 pset,防
POSIX 信号
POSIX 信号处理函数操作一组打包在 sigset_t 数据类型中信号:
Sigaction() 为特定的信号注册处理例程:
int sigaction(int signum, struct sigaction * act, struct sigaction *prev);
sigaction 结构描述内核处理 signum 的信息:struct sigaction
{
sighanlder_t sa_hanlder;
sigset_t sa_mask; // 阻塞信号的清单
unsigned long sa_flags; // 阻塞模式
void (*sa_restorer)(void); // 未使用
};
sa_hanlder 保存函数的地址,该函数带一个整型参数,没有返回值。它还可以是两个特别值之一:SIG_DFL 和 SIG_IGN。额外特性
POSIX API 提供多种 ANSI 库中所没有的服务。其中包括阻塞进入的信号并获取当前未决信号。
阻塞信号
sigprocmask() 阻塞和取消阻塞信号:int sigprocmask(int mode, const sigset_t* newmask,sigset_t * oldmask);
mode 可取以下值之一:
SIG_BLOCK —— 将 newmask 中的信号添加到当前的信号挡板中。
SIG_UNBLOCK —— 从当前的信号挡板中删除 newmask 信号。
SIG_SETMASK —— 仅阻塞 newmask 中的信号。
获取未决信号
阻塞的信号处于等待状态,直到进程就绪接收它们。这样的信号被称为未决信号,可以通过调用 sigpending() 来获取。
int sigpending(sigset_t * pset);
更多精彩
赞助商链接