#define _GNU_SOURCE #include #include #include #include static struct sigaction sa, old; static sigjmp_buf env; static void myalarm(int sig) { printf("alarm!\n"); siglongjmp(env,1); } int executer_avant_delai( void (*fun)(void *), void *parametre, int delai_en_seconde) { int ret = 1; sa.sa_handler = myalarm; sa.sa_flags = 0; // SA_RESETHAND; sigemptyset(&sa.sa_mask); sigaction(SIGALRM, &sa, &old); alarm(delai_en_seconde); if(sigsetjmp(env,1) == 0) fun(parametre); else ret = 0; // alarm alarm(0); sigaction(SIGALRM, &old, NULL); return ret; }