Bonjour,
Dans le livre de Stevens et Rago, ils donnent l'exemple de programme suivant pour illustrer comment fonctionnent les pipes:
Je ne comprenais pas pourquoi close(fd[1]) est mis au d�but du fils au lieu d'�tre mis � la fin du p�re. J'ai donc modifi� le programme ainsi (il faut d�commenter):
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 #include<stdio.h> #include<stdlib.h> #include<unistd.h> int main(void) { int n; int fd[2]; pid_t pid; char line[4096]; if (pipe(fd)<0) printf("pipe error"); if ((pid = fork()) < 0){ printf("fork error"); } else if (pid >0) { close(fd[0]); write(fd[1], "hello world\n", 12); } else { close (fd[1]); n = read(fd[0], line, 4096); write(STDOUT_FILENO, line, n); } exit(0); }
Je voulais forcer le fils � s'ex�cuter en premier. Je n'y suis pas arriv�! Le programme n'�crit jamais "fils"! En revanche, si j'ex�cute le programme en commentant comme je l'ai fait (c'est-�-dire sans close, ni write ni read), il �crit bien "fils" puis "p�re". C'est pour moi un myst�re. Quelqu'un a-t-il une explication? Merci d'avance.
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 #include<stdio.h> #include<stdlib.h> #include<unistd.h> int main(void) { int n; int fd[2]; pid_t pid; char line[4096]; if (pipe(fd)<0) printf("pipe error"); if ((pid = fork()) < 0){ printf("fork error"); } else if (pid >0) {waitpid(pid, NULL, 0); printf("père"); /* close(fd[0]); write(fd[1], "hello world\n", 12); */ } else {printf("fils"); /* close (fd[1]); n = read(fd[0], line, 4096); write(STDOUT_FILENO, line, n); */ } exit(0); }
Partager