Redirection de stdout en C
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é :
Code:
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");
}
} |
ce qui est drole c'est que fprintf (srdout, ...) marche mais pas printf :lol:
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:
1 2 3 4
| /* dup2 (fd[1], STDOUT_FILENO);*/
fclose (stdout);
stdout = fdopen (fd[1], "w");
stream = fdopen (fd[0], "r"); |
Code:
1 2 3 4
| dup2 (fd[1], STDOUT_FILENO);
fclose (stdout);
stdout = fdopen (STDOUT_FILENO, "w");
stream = fdopen (fd[0], "r"); |
Mais ça va du segfault à la perte des données.
J'ai fait quelque chose de travers ?