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 48 49 50 51 52 53 54
|
#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
#define ALR 1
#define MIN 50
#define MAX 100
int i;
int ret;
jmp_buf rest_Context;
struct sigaction s_Event;
/***
* Handler
***/
void h_Sig( void ){
printf("#Dectection division par Zéro à la tâche %d\n ", i);
longjmp( rest_Context, ALR );
}
/***
* Fonctyion divisition
***/
int f_Calcul( int iArg ){
return ( MIN / ( ( iArg * iArg) - MAX ) );
}
/***
* Fonction principale
***/
int main( void ){
int iRet = 0;
(&s_Event)->sa_handler = h_Sig;
sigaction( SIGFPE, &s_Event, NULL );
for( i = 0; i < MIN/3; i++ ){
iRet = setjmp( rest_Context );
if( iRet == 0 ){
ret = f_Calcul( i );
printf("Loop (%d) =\t%d\n", i, ret );
}
continue;
}
return ( 0 );
} |
Partager