UNIX/LINUX 全局跳转

全局跳转 
  UNIX 下的C 语言中, 有一对特殊的调用: 跳转函数,  原型如下: 
#include <setjmp.h> 
int setjmp(jmp_buf env); 
void longjump(jmp_buf env, int val); 
   函数setjmp 存储当前的堆栈环境(包括程序的当前执行位置)到参数env 中, 当函数正常调用成功时返回
0. 函数longjmp 恢复保存在env 中堆栈信息,  并使程序转移到env 中保存的位置处重新执行.  这两个函数
联合使用,  可以实现程序的重复执行. 
   函数longjmp 调用成功后,  程序转移到函数setjmp 处执行,  函数 setjmp 返回val.  如果参数 val的取值
为0, 为了与上次正常调用 setjmp 相区别, 函数setjmp 将自动返回1. 
   下面是一个使用了跳转语句的例子,  它跳转两次后退出. 
[bill@billstone Unix_study]$ cat jmp1.c 


#include <setjmp.h> 
  
int j = 0; 
jmp_buf env; 
  
int main() 
{ 
        auto int i, k = 0; 
  
 
        i = setjmp(env); 
                printf("setjmp = [%d], j = [%d], k = [%d]\n", i, j++, k++); 
        if(j > 2) 
                exit(0); 
        sleep(1); 
        longjmp(env, 1); 
  
        return 0; 
} 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值