From ff442426c1fac6e4bd35973c83480a8d6d3b4e27 Mon Sep 17 00:00:00 2001 From: ngwalang Date: Fri, 29 Sep 2023 12:32:18 +0200 Subject: [PATCH] Le PETIT avancement --- SCR3.1/TP4/mytimeout.c | 24 ++++++++++++++++++++++++ SCR3.1/TP4/pi.c | 14 ++++++++++++++ SCR3.1/TP4/test.c | 8 ++++++++ 3 files changed, 46 insertions(+) create mode 100644 SCR3.1/TP4/mytimeout.c create mode 100644 SCR3.1/TP4/test.c diff --git a/SCR3.1/TP4/mytimeout.c b/SCR3.1/TP4/mytimeout.c new file mode 100644 index 0000000..9179b8e --- /dev/null +++ b/SCR3.1/TP4/mytimeout.c @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include + +void kill_son(int){ + if +int main(int argc, char **argv){ + if (argc < 3){ + printf("Usage : %s [arg]", argv[0]); + return EXIT_FAILURE; + } + int secondes = (int) strtod(argv[1], NULL); + pid_t p; + p = fork(); + switch(p){ + case 0 : + + execl("/usr/bin/sh" , "-c", argv[2]) + case -1: + + default: + diff --git a/SCR3.1/TP4/pi.c b/SCR3.1/TP4/pi.c index 5d2ceb3..47ff68d 100644 --- a/SCR3.1/TP4/pi.c +++ b/SCR3.1/TP4/pi.c @@ -11,9 +11,12 @@ uint64_t shots = 0, shots_in = 0; double pi = 0, t1; +sigset_t inset, quiset, alset; + void int_handler(int){ alarm(0); + sigprocmask(SIG_BLOCK, &inset, NULL); char c; printf("Le programme tourne depuis %f secondes, voulez-vous vraiment l'arrĂȘter ? (O)ui / (N)on", tstamp() - t1); c = getchar(); @@ -22,21 +25,26 @@ void int_handler(int){ } else{ return; + sigprocmask(SIG_UNBLOCK, &inset, NULL); alarm(5); } } void alarm_handler(int){ + sigprocmask(SIG_BLOCK, &alset, NULL); printf("Valeur de pi en cours = %f\n", pi); printf("Nombre de tirs effectuĂ©s = %f\n", (double) shots); alarm(5); + sigprocmask(SIG_UNBLOCK, &alset, NULL); } void quit_handler(int){ alarm(0); + sigprocmask(SIG_BLOCK, &quiset, NULL); shots = 0; shots_in = 0; t1 = tstamp(); + sigprocmask(SIG_UNBLOCK, &quiset, NULL); alarm(5); } @@ -45,6 +53,12 @@ int main(int argc,char * argv[]) double x,y; t1 = tstamp(); alarm(5); + sigaddset(&alset, SIGINT); + sigaddset(&alset, SIGQUIT); + sigaddset(&inset, SIGALRM); + sigaddset(&inset, SIGQUIT); + sigaddset(&quiset, SIGINT); + sigaddset(&quiset, SIGALRM); set_signal_handler(SIGALRM, &alarm_handler); set_signal_handler(SIGINT, &int_handler); set_signal_handler(SIGQUIT, &quit_handler); diff --git a/SCR3.1/TP4/test.c b/SCR3.1/TP4/test.c new file mode 100644 index 0000000..e973aff --- /dev/null +++ b/SCR3.1/TP4/test.c @@ -0,0 +1,8 @@ +#include +#include + +int main(){ + int t[4] = {1, 2, 3, 4}, u[2] = t[1:]; + return 0; +} +