diff --git a/SCR/SCR3.1/TP04/helpers.c b/SCR/SCR3.1/TP04/helpers.c new file mode 100644 index 0000000..718fe40 --- /dev/null +++ b/SCR/SCR3.1/TP04/helpers.c @@ -0,0 +1,19 @@ +#include "helpers.h" +#include +#include + +int set_signal_handler(int signo, void (*handler)(int)) { + struct sigaction sa; + sa.sa_handler = handler; // call `handler` on signal + sigemptyset(&sa.sa_mask); // don't block other signals in handler + sa.sa_flags = SA_RESTART; // restart system calls + return sigaction(signo, &sa, NULL); +} + +double tstamp(void) { + struct timespec tv; + clock_gettime(CLOCK_REALTIME, &tv); + return tv.tv_sec + tv.tv_nsec * 1.0e-9; +} + + diff --git a/SCR/SCR3.1/TP04/helpers.h b/SCR/SCR3.1/TP04/helpers.h new file mode 100644 index 0000000..2084c6a --- /dev/null +++ b/SCR/SCR3.1/TP04/helpers.h @@ -0,0 +1,7 @@ +#ifndef _HELPERS_H +#define _HELPERS_H + +int set_signal_handler(int signo, void (*handler)(int)); +double tstamp(void); + +#endif diff --git a/SCR/SCR3.1/TP04/mes.txt b/SCR/SCR3.1/TP04/mes.txt new file mode 100644 index 0000000..d602d88 --- /dev/null +++ b/SCR/SCR3.1/TP04/mes.txt @@ -0,0 +1 @@ +ALIVE ! diff --git a/SCR/SCR3.1/TP04/pi.c b/SCR/SCR3.1/TP04/pi.c new file mode 100644 index 0000000..995e0ef --- /dev/null +++ b/SCR/SCR3.1/TP04/pi.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include +#include +#include +#include "helpers.h" + + +uint64_t shots = 0, + shots_in = 0; + +double pi = 0, + t1; + +void onAlarmSent(double pi, uint64_t shots) { + printf("Pi value = %f, Shots value = %lu", pi, shots); +} + +int main(int argc,char * argv[]) +{ + double x,y; + t1 = tstamp(); + + set_signal_handler(SIGALRM, onAlarmSent); + alarm(5); + + while(1){ + x = ((double)rand())/(double)RAND_MAX; + y = ((double)rand())/(double)RAND_MAX; + shots ++; + + if ((x*x+y*y) <= 1) + shots_in ++; + } +}