Bonjour,

hier, je pensais avoir compris la notion de tuyeaux, mais aujourd'hui, je m'aperçois que ce n' est pas le cas.

Comme indiqué dans le titre, je désire faire un programme qui crée n processus:
le premier envoie les données depuis l'entrée standard au 2ième, qui le passe au troisième, etc,
Le n-1 ième le passe les donnés au nième qui lui finalement les écrit sur la sortie standard.

Si j'ai bien compris, puisqu'ils ont tous le même parent, pas besoin de tuyeaux nommés, ou ai-je ànouveau raté un épisode ?

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
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <sys/wait.h>
 
#define N 10
 
int main()
{
	int tube1[2];
	int i;
	char buffer[100];
	char rec[100];
	char *p;
	pid_t pid;
	for(i=0;i<N;i++)
	{
		pipe(tube1);
		pid=fork();
		switch(pid)
		{
			case -1 : 	perror("fork");
						exit(1);
			case 0	:	
 						if(i==0)  // si c'est le premier processus, je lis sur stdin 
						{
 
							close(tube1[0]);
							fgets(buffer,100,stdin);
							p=strchr(buffer,'\n');
								*p='\0';
 
						}
  						else      // sinon je lis à partir du tube, j'ai mis des print, le 2ième(et suivants)  
						{          // n'entre jamais dans cette partie du code ( comprends pas pkoi )
 
							read(tube1[0],buffer,sizeof(buffer));
 
							close(tube1[0]);
						}
						// dans tous les cas, j'écris sur le tube
						write(tube1[1],buffer,strlen(buffer)+1);
 
						close(tube1[1]);
 						exit(0);
 			default:	if(i==N-1)    // le père lit du tube quand i == N-1 , mais le message n'est jamais         
						{              //  imprimé
							close(tube1[1]);
							read(tube1[0],rec,sizeof(rec));
							close(tube1[0]);
							printf("message reçu : %s\n",rec);
						}
		}
 
	}
 
	return 0;
}
Quand je lance le programme et que je tape qch au clavier, rien ne se passe.
Quelqu 'un peut-il me donner un coup de main stp ??
Je ne vois pas comment m'y prendre autrement.