Utilisation des fork et des pipes
	
	
		Bonjour à tous j'essaye de faire circuler un entier sur un anneau à 5 noeuds. Le premier fils
l'initialise, il s'incrémente sur chaque site. lorsque le fils 1 reçoit
un jeton dont la valeur est supérieure à 50 il gère la terminaison de
ses frères et du père.
Le problème c'est que là il me fait n'importe quoi et je ne sais pas très bien pourquoi ? Une petite aide serait la bienvenue.
	Code:
	
| 12
 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;
 
} | 
 Bonne soirée