- 论坛徽章:
- 0
|
我的系统参数是:Linux 2.6.32-41-generic Ubuntu 10.04 i686 GNU/Linux
我在自己的机子上运行apue中的程序清单10-15时的结果与书上的结果不一样,程序如下- #include "../apue.h"
- static void sig_int(int);
- int main(void)
- {
- sigset_t newmask, oldmask, waitmask;
- pr_mask("program start: ");
- if (signal(SIGINT, sig_int) == SIG_ERR)
- err_sys("signal(SIGINT) error");
- sigemptyset(&waitmask);
- sigaddset(&waitmask, SIGUSR1);
- sigemptyset(&newmask);
- sigaddset(&newmask, SIGINT);
- if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
- err_sys("SIG_BLOCK error");
- pr_mask("in critical region: ");
- if (sigsuspend(&waitmask) != -1)
- err_sys("sigsuspend error");
- pr_mask("after return from sigsuspend: ");
- if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
- err_sys("SIG_SETMASK error");
- pr_mask("program exit: ");
- exit(0);
- }
- static void sig_int(int signo)
- {
- pr_mask("\nin sig_int: ");
- }
复制代码 书上的结果是:- $./a.out
- program start:
- in critical region: SIGINT
- ^?
- in sig_int:SIGINT SIGUSR1
- after return from sigsuspend:SIGINT
- program exit:
复制代码 而我的结果在in sig_int:一行是:in sig_int: SIGUSR1,没有SIGINT。
请问:为什么SIGINT没有添加到信号屏蔽字中去?
|
|