apue书中一个关于sigsuspend函数的例子
看到有关signal一章,然后有一个程序在我电脑上执行的情况和书上描述的不同。代码如下
- #include "apue.h"
- volatile sig_atomic_t quitflag;
- static void sig_int(int signo)
- {
- if(signo == SIGINT)
- printf("\ninterrupt\n");
- else if(signo == SIGQUIT)
- quitflag = 1;
- }
- int main(void)
- {
- sigset_t zeromask, newmask, oldmask;
- if(signal(SIGINT, sig_int) == SIG_ERR)
- err_sys("signal(SIGINT) error");
- if(signal(SIGQUIT, sig_int) == SIG_ERR)
- err_sys("signal(SIGQUIT) error");
- sigemptyset(&zeromask);
- sigemptyset(&newmask);
- sigaddset(&newmask, SIGQUIT);
- if(sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
- err_sys("SIG_BLOCK error");
- while(quitflag == 0)
- sigsuspend(&zeromask);
- quitflag = 0;
- if(sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
- err_sys("SIG_SETMASK error");
- exit(0);
- }
复制代码按书上的结果, 应该是按CTRL+C就会输出字符串“interrupt”,按多次也是同样的结果, 按下CTRL+\就会退出程序。 我实际执行的时候按第一下CTRL+C会输出“interrupt”,按第二下CTRL+C就会直接退出程序,按下CTRL+\也会退出程序。 因此就是按下CTRL+C的情况和书上的不符,想知道原因。 多谢!
我这系统是UBUNTU 10.10, linux 2.6.35
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
同问。。。