WEB开发网
开发学院软件开发VC 防止信号处理失灵 阅读

防止信号处理失灵

 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 数据类型中信号:

  • int sigemptyset(sigset_t * pset); 清除 pset 中的所有信号。
  • int sigfillset(sigset_t * pset); 用可获得的信号填充 pset。
  • int sigaddset(sigset_t * pset, int signum); 将 signum 添加到 pset。
  • int sigdelset(sigset_t * pset, int signum); 从 pset 中删除 signum。
  • int sigismember(const sigset_t * pset, int signum); 如果 signum 包含在 pset 中,则返回非零,否则返回 0。
  • 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);

    上一页  1 2 3 

    Tags:防止 信号处理 失灵

    编辑录入:爽爽 [复制链接] [打 印]
    赞助商链接