From ef6ca77dc62fc3c502c4efdede59acc8f9659564 Mon Sep 17 00:00:00 2001 From: Nathan Baudrier Date: Fri, 7 Nov 2025 15:21:24 +0100 Subject: [PATCH] TP4 SCR --- SCR/SCR3.1/TP04/helpers.c | 19 +++++++++++++++++++ SCR/SCR3.1/TP04/helpers.h | 7 +++++++ SCR/SCR3.1/TP04/mes.txt | 1 + SCR/SCR3.1/TP04/pi.c | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 SCR/SCR3.1/TP04/helpers.c create mode 100644 SCR/SCR3.1/TP04/helpers.h create mode 100644 SCR/SCR3.1/TP04/mes.txt create mode 100644 SCR/SCR3.1/TP04/pi.c 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 ++; + } +}