ajout fichiers tp4

This commit is contained in:
lecorre 2021-10-15 14:46:20 +02:00
parent 1cb87a23e7
commit 3f357d6c5b
8 changed files with 117 additions and 0 deletions

BIN
TP4/.nfs00000000023a0b5b0000001f Executable file

Binary file not shown.

BIN
TP4/.nfs00000000023a1c8700000008 Executable file

Binary file not shown.

BIN
TP4/.nfs00000000023a1cc900000020 Executable file

Binary file not shown.

BIN
TP4/.nfs00000000023a2b8d00000009 Executable file

Binary file not shown.

BIN
TP4/a.out Executable file

Binary file not shown.

31
TP4/ex1.c Normal file
View File

@ -0,0 +1,31 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
static void msg1(int sig);
int main(int argc, char const *argv[]) {
pid_t fils;
if(!(fils=fork())) {
signal(SIGQUIT, &msg1);
signal(SIGINT, &msg1);
pause();
pause();
pause();
} else {
sleep(1);
kill(fils, SIGQUIT);
kill(fils, SIGINT);
sleep(1);
kill(fils, SIGKILL);
}
return EXIT_SUCCESS;
}
void msg1(int sig) {
printf("JE TRAITE PAS\n");
}

62
TP4/ex2.c Normal file
View File

@ -0,0 +1,62 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
static void work_finished(int sig);
static void save(int sig);
static void save_confirm(int sig);
pid_t fils;
int main(int argc, char const *argv[]) {
int mode = 'a'; // ou 'b' si a alors le fils n'a pas le temps de terminer
// si non a alors le fils termine son travail
if(!(fils=fork())) { // Fils
signal(SIGUSR2, &save);
printf("Travail en cours");
sleep(5);
if (mode != 'a') {
kill(getppid(), SIGQUIT); // Dire au père que le travail est terminé
}
pause();// En attente d'une réponse (après l'envoi de la fin du travail)
pause();// En attente d'une réponse (après l'envoi de la confirmation de sauvegarde)
} else { // Père
signal(SIGQUIT, &work_finished);
signal(SIGINT, &save_confirm);
if (mode == 'a') {
sleep(2);
printf("Dire au fils de sauvegarder")
} else {
pause(); // En attente de la fin du travail du fils
}
pause(); // En attente de la fin de la sauvegarde du fils
}
return EXIT_SUCCESS;
}
void work_finished(int sig) { // SIGQUIT
printf("Le travail est terminé\n");
kill(fils, SIGUSR2); // Dire au fils de sauvegarder
}
void save(int sig) { // SIGUSR2
printf("Sauvegarde des données en cours...\n");
sleep(1);
kill(getppid(), SIGINT); // Dire au père que la sauvegarde est terminée
}
void save_confirm(int sig) { // SIGINT
printf("Sauvegarde terminée\n");
sleep(.5);
kill(fils, SIGKILL); // Kill du fils
}

24
TP4/ex3.c Normal file
View File

@ -0,0 +1,24 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
static void babouche() {
printf("Je recois le signal 5/5");
}
int main(int argc, char const *argv[]) {
pid_t pid;
signal(SIGUSR2, &babouche);
if (pid=fork()) { // PERE
kill(pid, SIGUSR2);
} else { // FILS
pause();
}
return EXIT_SUCCESS;
}
// La réponse a la question :
// "Est ce que le handler de signaux d'un processus est hérité par son fils?"
// Est non.