码迷,mamicode.com
首页 > 系统相关 > 详细

linux的setjmp函数和longjmp函数

时间:2016-05-12 19:27:04      阅读:209      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!