Lu à tous,
je vais essayé d'être bref.
Bon en fait je voulais juste montrer un exemple de tube à mon pote et je suis tombé sur erreur que je n'arrive pas à comprendre.
Voici le code j'ai essayé de bien le commenter :
Donc en gros ce que je comprends pas c'est que le fils se blque sur le fgets et que par conséquent le père attend la fin de son fils indéfiniment.
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 int main(int argc, char **argv) { pid_t pid; int tube[2]; char line[128]; pipe(tube); pid = fork(); if (pid == 0) { //Je suis dans mon fils close(tube[1]); //Je remplace le descripteur de l'entrée standard par la sortie du tube dup2(tube[0], STDIN_FILENO); //J'attend que quelque chose arrive dans mon tube fgets(line, 128, stdin); //J'affiche le contenu de ce que j'ai lu printf("Recu : %s\n", line); close(tube[0]); } else { //Je suis dans le pere close(tube[0]); //Je remplace le descripteur de la sortie standard par l'entrée du tube dup2(tube[1], STDOUT_FILENO); //Je balance dans le tube cette chaine printf("Coucou je teste mon tube\n"); //J'attend que mon fils se termine et je récupère son pid pid = wait(NULL); //J'affiche le pid de mon unique fils fprintf(stderr, "Le fils num : %d\n", pid); } return(EXIT_SUCCESS); }
D'autre part si j'enlève le wait() tout se passe bien et pareil si à la place de fgets/printf j'utilise read/write tout en laissant le wait() à ce moment là.
Bon ben si quelqu'un à une idée je suis preneur.
Merci d'avance.
@++.
Partager