免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1759 | 回复: 9
打印 上一主题 下一主题

[Linux] apue疑惑 求大神 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-03 16:34 |只看该作者 |倒序浏览
  1 #include<setjmp.h>
  2 #include<signal.h>
  3 #include<unistd.h>
  4 static void sig_alrm(int);
  5 static jmp_buf env_alrm;
  6
  7 int main(void)
  8 {
  9   int n;
10   char line[10];
11
12   if(signal(SIGALRM,sig_alrm)==SIG_ERR)
13       printf("signal error!\n");
14   if(setjmp(env_alrm)!=0)
15   printf("read timeout!\n");
16   alarm(10);
17   if((n= read(STDIN_FILENO,line,10))<0)
18       printf("read error!\n");
19   alarm(0);
20   write(STDOUT_FILENO,line,n);
21   exit(0);
22 }
23 static void sig_alrm(int signo)
24 {
25      longjmp(env_alrm,1);
26 }

这个程序再 longjmp跳回去之后,alarm(10)为什么不再次产生信号。为什么这个程序不是循环的?  大神们。

论坛徽章:
0
2 [报告]
发表于 2012-12-03 16:42 |只看该作者
大牛们呢?

论坛徽章:
0
3 [报告]
发表于 2012-12-03 20:10 |只看该作者
alarm(10)是10秒后发一个SIGALARM信号,发送信号前程序早退出了,根本走不到sig_alrm中。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
4 [报告]
发表于 2012-12-03 20:21 |只看该作者
请用siglongjmp, 否则信号掩码不会恢复, 因为进入信号处理函数前会在该线程里阻塞该触发信号函数的信号, 而longjmp不会撤除该信号掩码.

论坛徽章:
0
5 [报告]
发表于 2012-12-03 20:22 |只看该作者
#include <stdio.h>
#include <setjmp.h>

jmp_buf buf;
banana(){
    printf("in banana() \n");
    longjmp(buf,1);
}
main(){
    if(setjmp(buf)){
        printf("back in main\n");
        banana();
    }
else{
        printf("first time through\n");
        banana();
    }
}
要循环这样写

论坛徽章:
0
6 [报告]
发表于 2012-12-04 12:14 来自手机 |只看该作者
懂了,谢谢。现在的系统都是这么处理信号吧?我只看到以前的系统要手动加代码实现信号处理期间又产生信号。

论坛徽章:
0
7 [报告]
发表于 2012-12-04 12:16 来自手机 |只看该作者
不会啊,哪里要求 输入。会阻塞的。

论坛徽章:
0
8 [报告]
发表于 2012-12-04 12:17 来自手机 |只看该作者
嗯,谢谢。

论坛徽章:
0
9 [报告]
发表于 2012-12-04 16:11 |只看该作者
谢谢回复 3# flyingeagle1015


   

论坛徽章:
0
10 [报告]
发表于 2012-12-04 16:12 |只看该作者
懂了,谢谢。现在的系统都是这么处理信号吧?我只看到以前的系统要手动加代码实现信号处理期间又产生信号。回复 4# linux_c_py_php


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP