Nonlocal Jumps

Prev: Signals
TOC: Exceptional Control Flow

#include <setjmp.h>

int setjmp(jmp_buf env);
int sigsetjmp(sigjmp_buf env, int savesigs);
								Returns: 0 from setjmp, nonzero from longjmps
#include <setjmp.h>

void longjmp(jmp_buf env, int retval);
void siglongjmp(sighmp_buf env, int retval);
														Never returns
#include "csapp.h"

sighmp_buf buf;

void hanlder(int sig){
	siglongjmp(buf, 1);
}
int main(){
	if(!sigsetjmp(buf, 1)){
		Signal(SIGINT, handler);
		Sio_put("starting\n");
	}
	else
		Sio_put("restarting\n");
	while(1){
		sleep(1);
		Sio_puts("processing--\n");
	}
	exit(0);
}

Prev: Signals
TOC: Exceptional Control Flow

Powered by Forestry.md