linux的setjmp函数和longjmp函数

函数原型  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  
#include 
#include 
#include 
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函数_第1张图片

你可能感兴趣的:(编程语言,linux网络编程)