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; 
} 




你可能感兴趣的:(UNIX/LINUX 全局跳转)