Thursday, April 06, 2006
Linux Longjmp
-----------Code------
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
jmp_buf env;
int i;
int max;
int main ()
{
int j;
max = 5050;
i = 0;
//longjmp here!!!
j = setjmp(env);
printf("j:= %d\n",j);
if(i < max)
{
printf("i:= %d\n", i);
i = i+j;
longjmp(env, j+1); //jump to setjmp(env) and return j+1
printf("Never reached\n");
}
else
{
printf("turns out 1+2+...+%d>=%d\n",j-1,i);
exit(0);
}
}
Result
rommel:~/longjmp> ./a.out
j:= 0
i:= 0
j:= 1
i:= 0
j:= 2
i:= 1
j:= 3
i:= 3
….
j:= 100
i:= 4950
j:= 101
turns out 1+2+...+100>=5050