歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> linux的setjmp函數和longjmp函數

linux的setjmp函數和longjmp函數

日期:2017/3/3 13:01:29   编辑:Linux技術

函數原型 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;
}
執行截圖

Copyright © Linux教程網 All Rights Reserved