免费注册 查看新帖 |

Chinaunix

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

关于setjmp和longjmp的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-02-16 11:10 |只看该作者 |倒序浏览
  1. #include <setjmp.h>;
  2. #include <signal.h>;
  3. #include <stdio.h>;
  4. #include <stdlib.h>;
  5. #include <unistd.h>;
  6. jmp_buf buf;

  7. void handler(int s)
  8. {
  9.     if (s == SIGINT )
  10.         printf("now got a EXIT signal\n");
  11.         printf("input 'y' or 'n' for choice!\n");
  12.                 switch(getc(stdin))
  13.                 {
  14.                         case 'y': exit(0);
  15.                         case 'n': longjmp(buf,1);break;
  16.       default:         exit(0);                          
  17.     }
  18. }

  19. int main()
  20. {
  21.     if(setjmp(buf))
  22.         printf("back in main\n");
  23.     else
  24.         printf("first time in main\n");  
  25.     signal(SIGINT,handler);
  26.     for(;;)
  27.     {
  28.       printf("--\n");
  29.       sleep(5);
  30.     }
  31.      
  32.     return 0;
  33.    
  34. }
复制代码

以前从没接触过这两个函数,试着写了一个!但遇到这样的问题,当我输入y或者n后正常了,但当我输入n返回主函数,再次CTRL+C的时候,按道理应该继续由
void handler(int s)接管,但却按照默认的退出了!是我哪里考虑错了,请大家指教!

论坛徽章:
0
2 [报告]
发表于 2005-02-16 11:13 |只看该作者

关于setjmp和longjmp的问题!

原本我是把signal(SIGINT,handler); 放在主函数开始的,后来试着放入循环中重复注册,但还是不行!
谁给说说哪里错了?

论坛徽章:
0
3 [报告]
发表于 2005-02-16 11:36 |只看该作者

关于setjmp和longjmp的问题!

哦。知道怎么做了!
请斑竹删除吧!
snooker 该用户已被删除
4 [报告]
发表于 2005-03-03 18:42 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP