From 858cd39d496d00883554685794f3afb4283dc6fa Mon Sep 17 00:00:00 2001 From: JunkJumper Date: Thu, 24 Sep 2020 11:15:16 +0200 Subject: [PATCH] p_fork_wait ok --- .../Demonstrations_a_etudier/p_fork_wait.c | 52 +++++++++++++++-- .../p_fork_wait_exit.c | 57 ++++++++++++++++--- 2 files changed, 97 insertions(+), 12 deletions(-) diff --git a/2020-2021/S3T_TP_03_PROCESSUS-2-PROG/Demonstrations_a_etudier/p_fork_wait.c b/2020-2021/S3T_TP_03_PROCESSUS-2-PROG/Demonstrations_a_etudier/p_fork_wait.c index 0a3cc26..c6150bb 100644 --- a/2020-2021/S3T_TP_03_PROCESSUS-2-PROG/Demonstrations_a_etudier/p_fork_wait.c +++ b/2020-2021/S3T_TP_03_PROCESSUS-2-PROG/Demonstrations_a_etudier/p_fork_wait.c @@ -2,7 +2,7 @@ /* p_fork_wait : Ce programme illustre le mecanisme */ /* de duplication de processus de LINUX. */ /* Le processus fils affiche N slashs,pendant */ -/* que le père attend la fin du fils pour afficher */ +/* que le p�re attend la fin du fils pour afficher */ /* un message de fin. */ /* La valeur de N est transmise en premier argument */ /* de la commande. */ @@ -10,11 +10,53 @@ /*******************************************************/ #include +#include +#include +#include +#include +#include -int main (int argc, char* argv[]) { +int main(int argc, char *argv[]) +{ -/**********************/ -/* PARTIE A COMPLETER */ -/**********************/ + /**********************/ + /* PARTIE A COMPLETER */ + /**********************/ + int res = fork(); + int max = atoi(argv[1]); + + if (res < 0) + { + printf("ERREUR FORK\n"); + } + else + { + if (res == 0) + { /************************** FILS ***********************/ + printf("Je suis le fils :\n"); + printf("pid : %d\n", getpid()); + printf("ppid : %d\n", getppid()); + for (int i = 0; i < max; i++) + { + printf("/"); + } + printf("\n\n"); + } + else + { /************************** PERE ***********************/ + wait(NULL); + printf("Je suis le père :\n"); + printf("pid : %d\n", getpid()); + printf("ppid : %d\n", getppid()); + + for (int i = 0; i < max; i++) + { + printf("*"); + } + printf("\n\n"); + } + } + + return 0; } diff --git a/2020-2021/S3T_TP_03_PROCESSUS-2-PROG/Demonstrations_a_etudier/p_fork_wait_exit.c b/2020-2021/S3T_TP_03_PROCESSUS-2-PROG/Demonstrations_a_etudier/p_fork_wait_exit.c index 053fbc0..92fc040 100644 --- a/2020-2021/S3T_TP_03_PROCESSUS-2-PROG/Demonstrations_a_etudier/p_fork_wait_exit.c +++ b/2020-2021/S3T_TP_03_PROCESSUS-2-PROG/Demonstrations_a_etudier/p_fork_wait_exit.c @@ -7,20 +7,63 @@ /* Le processus fils affiche un message puis retourne */ /* un code de retour pris dans argv[1]. */ /* Le pere affiche "Operation reussie" si le fils */ -/* s'est bien terminé, et "Echec d'operation" sinon. */ +/* s'est bien termin�, et "Echec d'operation" sinon. */ /* */ -/* Convention : "bien terminé" == (code de retour == 0)*/ +/* Convention : "bien termin�" == (code de retour == 0)*/ /* */ /* Technique : Utiliser wait (adresse) et WEXITSTATUS */ /* */ /*******************************************************/ #include +#include +#include +#include +#include +#include -int main (int argc, char* argv[]) { -/**********************/ -/* PARTIE A COMPLETER */ -/**********************/ +int main(int argc, char *argv[]) +{ -} + /**********************/ + /* PARTIE A COMPLETER */ + /**********************/ + + int res = fork(); + int max = atoi(argv[1]); + + if (res < 0) + { + printf("ERREUR FORK\n"); + } + else + { + if (res == 0) + { /************************** FILS ***********************/ + printf("Je suis le fils :\n"); + printf("pid : %d\n", getpid()); + printf("ppid : %d\n", getppid()); + for (int i = 0; i < max; i++) + { + printf("/"); + } + printf("\n\n"); + } + else + { /************************** PERE ***********************/ + wait(NULL); + printf("Je suis le père :\n"); + printf("pid : %d\n", getpid()); + printf("ppid : %d\n", getppid()); + + for (int i = 0; i < max; i++) + { + printf("*"); + } + printf("\n\n"); + } + } + + return 0; +} \ No newline at end of file