UNIX/LINUX 全局跳转

本文介绍C语言中setjmp和longjmp函数的使用方法,通过示例代码演示如何利用这对特殊函数实现程序的全局跳转及重复执行。具体探讨了它们在UNIX环境下如何保存和恢复程序状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全局跳转 
  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; 
} 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值