首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux信号处理机制(3)

Linux信号处理机制(3)

参数结构sigaction定义如下          struct sigaction
          {
          void (*sa_handler) (int);
          sigset_t sa_mask;
          int sa_flags;
          void (*sa_restorer) (void);
          }
          sa_handler此参数和signal()的参数handler相同,代表新的信号处理函数,其他意义请参考signal()。
          sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号搁置。
          sa_restorer 此参数没有使用。
          sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。
          OR 运算(|)组合
          A_NOCLDSTOP : 如果参数signum为SIGCHLD,则当子进程暂停时并不会通知父进程
          SA_ONESHOT/SA_RESETHAND:当调用新的信号处理函数前,将此信号处理方式改为系统预设的方式。
          SA_RESTART:被信号中断的系统调用会自行重启
          SA_NOMASK/SA_NODEFER:在处理此信号未结束前不理会此信号的再次到来。
          int sigemptyset(sigset_t *set);
          int sigfillset(sigset_t *set);
          int sigaddset(sigset_t *set,int signo);
          int sigdelset(sigset_t *set,int signo);
          int sigismember(sigset_t *set,int signo);
          int sigprocmask(int how,const sigset_t *set,sigset_t *oset);
          sigemptyset函数初始化信号集合set,将set设置为空.sigfillset也初始化信号集合,只是将信号集合设置为所有信号的集合.sigaddset将信号signo加入到信号集合之中,sigdelset将信号从信号集合中删除.sigismember查询信号是否在信号集合之中.
          sigprocmask是最为关键的一个函数.在使用之前要先设置好信号集合set.这个函数的作用是将指定的信号集合set加入到进程的信号阻塞集合之中去,如果提供了oset那么当前的进程信号阻塞集合将会保存在oset里面.参数how决定函数的操作方式.
          SIG_BLOCK:增加一个信号集合到当前进程的阻塞集合之中.
          SIG_UNBLOCK:从当前的阻塞集合之中删除一个信号集合.
          SIG_SETMASK:将当前的信号集合设置为信号阻塞集合.
继承事业,薪火相传
返回列表