linux的setjmp函数和longjmp函数

来源:互联网 发布:站长之家源码 编辑:程序博客网 时间:2024/05/21 02:52

函数原型  int setjmp(jmp_buf env)

setjmp参数env的类型是一个特殊类型jmp_buf。这一数据类型是某种形式的数组,其中存放:在调用longjmp时能用来恢复栈状态的所有信息。因为需要在另一个函数中引用env变量,所以规范的处理方式是将env变量定义为全局变量setjmp函数初次启用时返回 0 值。


函数原型  void longjmp(jmp_buf env, int val)

longjmp函数的中参数env是由setjmp函数所保存的堆栈环境、参数val设置setjmp函数的返回值。longjmp函数本

身是没有返回值的,它执行跳转到保存env参数的setjmp函数调用,并由setjmp函数调用返回,此时setjmp函数的

返回值就是 val 。


#include  <setjmp.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>int j = 0;jmp_buf env;int main (){int i, k=0;// setjmp函数用于设置跳转的目的堆栈情况,直接调用该函数,则返回0,若由longjmp的调用,    // 导致setjmp被调用,则返回val(longjmpd的第二个参数)// env保留了需要返回的位置的堆栈情况i = setjmp(env);printf("setjmp=[%d];j=[%d];k=[%d]\n", i, j++, k++);if (j > 5) exit(0);sleep(1);// 进行跳转longjmp(env, j);return 0;}
执行截图



1 0