Bonjour,
j'ai voulu m'amuser un peu avec les redictions mais je crois que je suis tombé sur un os
Je code en GTK+ et la redirection se fait dans un thread à part du reste du programme (je problème vient peut être de là), voici le code de redirection simplifié :
ce qui est drole c'est que fprintf (srdout, ...) marche mais pas printf
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 int fd[2]; gchar text[BUFSIZ] = ""; FILE *stream; if (pipe (fd) == 0) { dup2 (fd[1], STDOUT_FILENO); fclose (stdout); stdout = fdopen (fd[1], "w"); stream = fdopen (fd[0], "r"); if (stream && stdout) { printf ("printf\n"); fflush (stdout); fprintf (stdout, "fprintf\n"); fflush (stdout); write (STDOUT_FILENO, "write\n", 6); while (GTK_IS_STDOUT_VIEW (p_stdout_view)) { if (fgets (text, BUFSIZ, stream)) { /* redirection */ } } } else { printf ("Erreur\n"); } }
Pour continuer dans le commique, la redirection ne marche pas dans le reste du progamme.
Bien sur j'ai essayé quelques combinaisons tel que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 /* dup2 (fd[1], STDOUT_FILENO);*/ fclose (stdout); stdout = fdopen (fd[1], "w"); stream = fdopen (fd[0], "r");Mais ça va du segfault à la perte des données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 dup2 (fd[1], STDOUT_FILENO); fclose (stdout); stdout = fdopen (STDOUT_FILENO, "w"); stream = fdopen (fd[0], "r");
J'ai fait quelque chose de travers ?
Partager