From 2928bd9fd95eef2191188b8346151bdb058cd2bf Mon Sep 17 00:00:00 2001 From: kumail074 Date: Sat, 23 Nov 2024 01:12:13 +0500 Subject: [PATCH] longjmp --- learning/processes/longjmp.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 learning/processes/longjmp.c diff --git a/learning/processes/longjmp.c b/learning/processes/longjmp.c new file mode 100644 index 0000000..aaf2f2f --- /dev/null +++ b/learning/processes/longjmp.c @@ -0,0 +1,32 @@ +#include +#include + +static jmp_buf env; + +static void f2(void) { + longjmp(env, 2); +} + +static void f1(int argc) { + if(argc == 1) + longjmp(env, 1); + f2(); +} + +int main(int argc, char *argv[]) { + switch (setjmp(env)) { + case 0: + printf("calling f1() after initial setjmp()\n"); + f1(argc); + break; + + case 1: + printf("came back from f1()\n"); + break; + + case 2: + printf("came back from f2()\n"); + break; + } + exit(EXIT_SUCCESS); +}