1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#define lire 0
#define ecrire 1
int i;
int nbClient;
int status;
int main(int argc, char **argv)
{
//Initialisation des variables
nbClient = atoi(argv[1]);
int tube[nbClient][2];
int pid[nbClient];
//Creation des tubes
for(i=0;i<nbClient;i++)
{
pipe(tube[i]);
}
//Creation des processus
for(i=0;i<nbClient;i++)
{
switch(fork())
{
case 0:
pid[i] = getpid();
close(tube[i][lire]);
close(tube[((i-1)%nbClient)][ecrire]);
int jeton;
if(i==0)
{
jeton=0;
printf("Client Numero : %d(%d) => Envoie du jeton : %d\n",i+1,getpid(),jeton);
write(tube[i][ecrire],&jeton,sizeof(jeton));
}
do
{
read(tube[((i-1)%nbClient)][lire],&jeton,sizeof(jeton));
//printf("Processus: %d => Lecture du jeton : %d\n",getpid(),jeton);
//printf("Client Numero : %d => PID : %d\n",i+1,pid[i]);
if(jeton < 10)
{
jeton++;
printf("Processus: %d => Envoie du jeton : %d\n",getpid(),jeton);
write(tube[i][ecrire],&jeton,sizeof(jeton));
}
else
{
}
} while(jeton < 10);
close(tube[((i-1)%nbClient)][lire]);
write(tube[((i-1)%nbClient)][ecrire],&jeton,sizeof(jeton));
close(tube[i][ecrire]);
close(tube[((i-1)%nbClient)][lire]);
exit(i);
break;
case -1:
printf("Probleme dans la creation du processus\n");
exit(EXIT_FAILURE);
/*default:
printf("");*/
}
}
//Attente des processus
for(i=0;i<nbClient;i++)
{
wait(&status);
//printf("Mise en attente du processus : %d\n",&status);
}
return EXIT_SUCCESS;
} |
Partager