From 6d8453bae1c1652f1d0ce6d5fc49779a2498310d Mon Sep 17 00:00:00 2001 From: anperederi Date: Tue, 7 Nov 2023 08:58:35 +0100 Subject: [PATCH] Add system's TP --- 2A/systeme/tp/3_tp/pereFilsMultiple | Bin 34112 -> 34008 bytes 2A/systeme/tp/3_tp/pereFilsMultiple.c | 109 ++++++++++---------------- 2 files changed, 43 insertions(+), 66 deletions(-) diff --git a/2A/systeme/tp/3_tp/pereFilsMultiple b/2A/systeme/tp/3_tp/pereFilsMultiple index 9736e05e968014fdc722b2f55736fc5cb9bc9a8c..6296cff482753e2e6b29191c82bd1291392f56eb 100755 GIT binary patch delta 2243 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 #include #include -#include #include -# define TAILLE_BUF 80 // 80 = taille d'une ligne - - -void fermeTubesPere(int N, int tubes[N][2]) { - int i; - for (i=0 ; i 0) { cpt++; printf("\t\e[1;33mFils n° %d : %d : lecture de\e[1;31m %s\e[0m\n", numFils, cpt, buffer); } - printf("Fils se termine sur fin de lecteure du tube\n"); - fermeTubesFils(N, tubes); - fermeAutresTubes(N, tubes, numFils); + + printf("Fils se termine sur fin de lecture du tube\n"); + close(tubes[numFils][0]); exit(0); } void codeDuPere(int N, int tubes[N][2], int i) { char buffer[TAILLE_BUF]; + close(tubes[i][0]); // Fermer l'extrémité de lecture inutile du tube + + while (fgets(buffer, TAILLE_BUF, stdin) != NULL) { + int dest_process; + char text[TAILLE_BUF]; + if (sscanf(buffer, "%d %[^\n]", &dest_process, text) == 2 && dest_process >= 0 && dest_process < N) { + // Écriture du texte dans le tube du processus destinataire approprié + write(tubes[dest_process][1], text, strlen(text)); + } else { + fprintf(stderr, "Message invalide (il faut mettre le numero du fils en 1er) : %s", buffer); + } + } - while(fgets(buffer, TAILLE_BUF, stdin) != NULL){ - write(tubes[i][1], buffer, TAILLE_BUF); + fermeTubesFils(N, tubes); + for (int j = 0; j < N; j++) { + wait(NULL); // Attendre que tous les fils se terminent } - fermeTubes(N, tubes); - wait(NULL); - printf("Pere se termine apès son fils.\n"); + printf("Père se termine après ses fils.\n"); exit(EXIT_SUCCESS); } -int main(int argc, char *argv[]) -{ - int i, etat, N; +int main(int argc, char *argv[]) { + int i, N; pid_t pid; int tubes[100][2]; - int *tmp; - if (argc!=2) { - fputs("Donner un arg entier\n", stderr); + if (argc != 2) { + fputs("Donnez un argument entier.\n", stderr); exit(1); } - N=atoi(argv[1]); + N = atoi(argv[1]); if (N <= 0 || N > 100) { fprintf(stderr, "N doit être un entier positif ou inférieur à 100.\n"); exit(1); } - if(pipe(tubes[0])== -1) { - perror(" pipe "); - exit(errno); - } - tmp = (int*)malloc(sizeof(int) * 2 * N); - if(tmp == NULL){ - printf("Erreur Malloc"); - exit(EXIT_FAILURE); + // Créez les tubes pour la communication entre les processus + for (i = 0; i < N; i++) { + if (pipe(tubes[i]) == -1) { + perror("pipe"); + exit(errno); + } } - /* le pere va creer N fils */ - for (i=0 ; i