首页 > 系统服务 > 详细

linux的setjmp函数和longjmp函数

时间:2016-05-12 19:24:26      阅读:162      评论:0      收藏:0      [点我收藏+]

函数原型  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;
}
执行截图

技术分享

linux的setjmp函数和longjmp函数

原文:http://blog.csdn.net/u012296503/article/details/51354194

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!