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 : 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");
      }
    }
ce qui est drole c'est que fprintf (srdout, ...) marche mais pas printf
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");
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");
Mais ça va du segfault à la perte des données.

J'ai fait quelque chose de travers ?