Bonjour à tous!!!

Je m'initie à la communication inter-processus, et par là-même je découvre le C (quel beau langage!!!)

Bon voilà mon petit problème, je tourne en rond depuis ce matin :
Je crée 3 tubes (tube[3][2]) à l'aide de la fonction pipe : pipe(tube[i]) (avec i entre 0 et 2)
Ensuite je crée trois processus fils. Le père envoie 0 au 1er processus, 1 au 2ème et 2 au 3ème.
Quand je code tout dans le main, pas de problème ça fonctionne.
Mais pour éviter les lignes redondantes, j'ai voulu faire une fonction lecture(int n); (avec n entre 0 et 2), et là ça ne marche plus!!!

Voici mon code :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
 
int tube[3][2];
 
 
void lecture(int n)
{
	char buf[6];
 
	printf("%d-1\n",n);
	close(tube[n][1]);
	printf("%d-2\n",n);
	read(tube[n][0], &buf, 6*sizeof(char));
	printf("%d-3\n",n);
	printf("buffer fils %d : %s\n",n ,buf);
}
 
 
int main(void)
{
	int i;
	pid_t pid[3];
 
	/* Initialisation des tubes */
	pipe(tube[0]);
	pipe(tube[1]);
	pipe(tube[2]);
 
 
	if(fork() == 0)
	{
		/* Nous sommes dans le fils 0 */
		lecture(0);
		exit(0);
	}
	else
	{
		/* Nous sommes dans le père */
		char buffer[6];
		close(tube[0][0]);
		sprintf(buffer,"%d",0);
		printf("buffer père 0 : %s\n", buffer);
		write(tube[0][1], &buffer, 6*sizeof(char));
		wait();
	}
 
	if(fork() == 0)
	{
		/* Nous sommes dans le fils 1 */
		lecture(1);
		exit(0);
	}
	else
	{
		/* Nous sommes dans le père */
		char buffer[6];
		close(tube[1][0]);
		sprintf(buffer,"%d",1);
		printf("buffer père 1 : %s\n", buffer);
		write(tube[1][1],&buffer,6*sizeof(char));
		wait();
	}
 
	if(fork() == 0)
	{
		/* Nous sommes dans le fils 2 */
		lecture(2);
		exit(0);
	}
	else
	{
		/* Nous sommes dans le père */
		char buffer[6];
		close(tube[2][0]);
		sprintf(buffer,"%d",2);
		printf("buffer père 2 : %s\n", buffer);
		write(tube[2][1],&buffer,6*sizeof(char));
		wait();
	}
}
Vraiment je n'y comprends rien... Le fils 0 reçoit bien mon caractère, mais les deux autres ne dépassent pas le [b]read(...)[\b].

Quelqu'un peut-il m'aider???