日期:2014-05-16  浏览次数:20731 次

一个关于apue里的问题
   最近在看unix编程,看到了信号这一章,好迷惑。。。。很多都不能理解。比如在下面这段代码中TELL_WAIT()为什么要Block SIGUSR1 and SIGUSR2 呢?如果没有阻塞这两个信号有什么后果呢?望各位路过大神可以解答一下我的疑惑。万分感激    

#include "apue.h"

static volatile sig_atomic_t sigflag; /* set nonzero by sig handler */
static sigset_t newmask, oldmask, zeromask;

static void
sig_usr(int signo)      /* one signal handler for SIGUSR1 and SIGUSR2 */
{
        sigflag = 1;
}

void
TELL_WAIT(void)
{
        if (signal(SIGUSR1, sig_usr) == SIG_ERR)
                err_sys("signal(SIGUSR1) error");
        if (signal(SIGUSR2, sig_usr) == SIG_ERR)
                err_sys("signal(SIGUSR2) error");
        sigemptyset(&zeromask);
        sigemptyset(&newmask);
        sigaddset(&newmask, SIGUSR1);
        sigaddset(&newmask, SIGUSR2);
/*                                                    
         * Block SIGUSR1 and SIGUSR2, and save current signal mask.
         */                                                   
        if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)   
                err_sys("SIG_BLOCK error");                   
}                                                             
                                                              
void                                                        &nbs