1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <setjmp.h>
sigjmp_buf jmp_context;
void signal_handler( int flags ){
siglongjmp( jmp_context, 1 );
/* echec du saut */
if( SIG_ERR == signal(flags, SIG_DFL) ){
(void)fprintf(stderr, "Error(%d)\t:%s\n", errno,
strerror(errno) );
abort(); /* core dump */
}
(void)raise( flags );
}
int main( void ){
int jaugeValue = 10;
struct sigaction sig;
sig.sa_flags = 0;
sig.sa_handler = signal_handler;
sigfillset( &sig.sa_mask );
sigaction( SIGFPE, &sig, NULL );
for( ;; ){
if( 0 != sigsetjmp(jmp_context, 1) )
(void)fprintf(stderr, "Div zero !!!!\n");
/* Test capture */
for( int i = 0; ((2*i)/--jaugeValue) != -1; i++ ){
(void)puts("next calcul..");
}
break;
}
return EXIT_SUCCESS;
} |
Partager