From 96f0f537edd99e14e059f5b9765bd91f2114c089 Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Thu, 24 Mar 2011 01:26:51 +0100 Subject: [PATCH] Presque propre au niveau du producteur --- C_Language/TP_SYS/tp_sema/producteur.c | 39 ++++++++++++++++---------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/C_Language/TP_SYS/tp_sema/producteur.c b/C_Language/TP_SYS/tp_sema/producteur.c index 6763285..2e42481 100644 --- a/C_Language/TP_SYS/tp_sema/producteur.c +++ b/C_Language/TP_SYS/tp_sema/producteur.c @@ -11,18 +11,19 @@ #include "types.h" #include "sema.h" +#define NAMESIZE 30 + WINDOW *creation_fenetre(int n,int d,char *t); int main( int argc, char **argv) { if(argc < 2) { printf("Usage %s numIPC\n", argv[0]); exit(EXIT_FAILURE); } MEMP *memoireP; - MSG temp; - int mutex_data, mutex_tpa, sem_global, continuer = 0, i=0, tete; + int mutex_data, mutex_tpa, sem_global, i=0; char c; - MSG message; const char CTRL_D = 4 ; int shmid; int shm_key = atoi(argv[1]); + char * nom_de_la_fenetre = NULL; WINDOW * fenetre ; @@ -47,12 +48,15 @@ int main( int argc, char **argv) //P(sem_global); P(mutex_tpa); for(i = 0; i < MAX_PROD && memoireP->tpa[i] != -1 ; i++); + if(memoireP->tpa[i] != -1) { V(mutex_tpa); exit(EXIT_FAILURE); } + memoireP->tpa[i] = 0; V(mutex_tpa); - - if(memoireP->tpa[i] != -1) { exit(EXIT_FAILURE); } - memoireP->tpa[i] = 0; - fenetre = creation_fenetre(LINES,0,"PRODUCTEUR") ; + + // Je donne un nom à ma fenêtre + nom_de_la_fenetre = (char *) malloc(sizeof(char *) * NAMESIZE); + snprintf(nom_de_la_fenetre, NAMESIZE, "PRODUCTEUR %d", i); + fenetre = creation_fenetre(LINES,0,nom_de_la_fenetre); // On quitte le producteur en tappant CTRL_D while (( c = wgetch(fenetre)) != CTRL_D) @@ -61,13 +65,14 @@ int main( int argc, char **argv) P(mutex_data); if(((memoireP->queue -1) % MAX_BUF) != (memoireP->tete % MAX_BUF) ) { - temp = (MSG) memoireP->f[memoireP->tete]; - temp.c = (char) c; - temp.idp = i; - tete = (int) memoireP->tete; - memoireP->f[tete] = (MSG) temp; - tete++; - memoireP->tete = (int) tete; + memoireP->f[memoireP->tete].c = c; + memoireP->f[memoireP->tete].idp = i; + //temp.c = (char) c; + //temp.idp = i; + //tete = (int) memoireP->tete; + //memoireP->f[tete] = (MSG) temp; + //tete++; + memoireP->tete++;// = (int) tete; } V(mutex_data); @@ -83,7 +88,11 @@ int main( int argc, char **argv) //V(sem_global); endwin(); - return (EXIT_SUCCESS); + + // On libère la mémoire de façon propre + free(nom_de_la_fenetre); + + exit(EXIT_SUCCESS); }