slt
Voila j'ai un problème avec un fork. Voici le 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 #include <sys/wait.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main (int argc,char ** argv){ int tube[2],pid; char buffer[10]; if ( pipe(tube) != 0){ printf("Erreur de tube\n"); exit(5); } pid = fork (); if (pid > 0) { // Processus père close (tube[1]); memset(buffer,0,10); while(read(tube[0],buffer,5) != 0) { printf("%s",buffer); memset(buffer,0,10); } wait(&pid); } else if (pid == 0) { // processus fils dup2(tube[1], fileno(stdout)); sleep(1); printf("1e\n"); write(STDOUT_FILENO,"2e\n",strlen("2e\n")); sleep(3); write(STDOUT_FILENO,"3e\n",strlen("3e\n")); sleep(1); printf("4e\n"); } else { printf("Problème de fork\n"); } return 0; }
Le but du code est de lire la sortie standard du processus fils dans le processus père. Le but étant de plus tard faire des exec dans le processus fils.
Le problème est que l'affichage est assez bizarre :
si le fils utilise que des printf : ils sont tous lus en même temps à la fin du fils.
si il y a des write(STDOUT_FILENO,...) il n'y a pas l'air d'avoir de problèmes.
Par exemple le programme affiche :
2e
3e
1e
4e
(où le 1 et 4 apparaissent en même temps).
En soit c'est pas forcement un problème SAUF que les exec qui seront utilisés utilisent des printf et j'ai besoin d'avoir un affichage progressif.
Si vous avez des idées je suis preneur !!
Merci d'avance.
Partager