Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1056613
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: LINUX

2015-12-02 16:40:38


点击(此处)折叠或打开

  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <setjmp.h>

  5. /*是某种形式的数组,存放所需要的信息,在调用longjmp时,用来恢复栈状态的所有信息。
  6. 因为需要在另一个函数中引用该变量,所以一般把它定义为全局变量。*/
  7. jmp_buf jmp_addr;
  8. int fun1();
  9. int fun2();

  10. int main(int argc, char * * argv, char * * envp)
  11. {
  12.     printf("setjmp(),longjmp()函数的使用:\n");
  13.     int ret = -1;
  14.     ret = setjmp(jmp_addr); /*在希望返回的位置调用setjmp:对于一个setjmp函数可以有多个longjmp函数*/
  15.     if(ret == 0)
  16.     {
  17.         printf("setjmp()返回:是直接调用setjmp()的返回,返回值=[%d]\n", ret);
  18.     }
  19.     else
  20.     {
  21.         printf("setjmp()返回:是调用longjmp()函数造成的返回,返回值=[%d]\n", ret);
  22.     }
  23.     while(1)
  24.     {
  25.         printf("==================================================\n");
  26.         
  27.         //sleep(2);
  28.         //fun1();
  29.         sleep(2);
  30.         fun2();
  31.     }
  32.     
  33.     return 0;
  34. }

  35. int fun1()
  36. {
  37.     printf("fun1()调用longjmp()函数!\n");
  38.     longjmp(jmp_addr, 1); /*第2个参数:将成为setjmp()函数处返回的值*/
  39.     
  40.     return 0;
  41. }

  42. int fun2()
  43. {
  44.     printf("fun2()调用longjmp()函数!\n");
  45.     longjmp(jmp_addr, 2);
  46.     
  47.     return 0;
  48. }

阅读(427) | 评论(0) | 转发(0) |
0

上一篇:模拟竞争

下一篇:memmove函数

给主人留下些什么吧!~~