Forum Programmation.c Forcer le flush d'un application

Posté par  .
Étiquettes :
0
15
mai
2007
Bonjour à tous,

Voilà, j'ai un petit problème avec une application sur lequel j'avais commencé une conversation sur un autre forum mais qui manque de réponse peut-être à cause de son niveau, donc je la tente avec des gens peut-être plus expert.

Conversation originale :
http://www.developpez.net/forums/showthread.php?p=2069429

En résumé :
J'aimerai forcer le flush du buffer de sortie (enfin, je pense que c'est une question de buffer) de certaine application comme le fait les consoles.
Je suis actuellement coincé sur Blender.
Si je fait dans une console :
$ blender 2>&1 > out.txt
et dans une autre :
$ tail -f out.txt
Le fichier "out.txt" ne se rempli que quand je quitte Blender. Tandis que autre application (genre mplayer) se rempli bien au fur et à mesure.
Mais si je lance blender simplement dans une console, j'ai bien la sortie au fur et à mesure. Donc il y'a une rétention de sortie quelque part que la console arrive à récuperer.

Si quelqu'un saurai comment faire (en C de préférence) je lui en serai très reconnaissant :)

Snark
  • # .

    Posté par  . Évalué à 2.

    Qu'est ce que cela donne en effectuant une redirection de STDERR directement dans le fichier, plutot que de passer par une double redirection ?


    $ blender 2>&out.txt
    • [^] # Re: .

      Posté par  . Évalué à 2.

      Avec ta commande, ça me donne
      bash: out.txt : redirection ambigûe

      Mais si tu veux parler de
      $ blender 2> out.txt
      ça ne donne rien parce qu'il n'y a pas d'erreur.
  • # le problème est dans blender

    Posté par  . Évalué à 1.

    Je dirais que quand Blender a sa sortie dans une console, il fait bien un "flush" à chaque fin de ligne, tandis que quand la sortie est dans un fichier, ce n'est pas le cas.

    Ce comportement n'est peut-être pas dans Blender directement, mais peut-être dans l'implémentation dans la libc (à vérifier). Je crains qu'il n'y ait pas de solution à ton problème.

    Personnellement, je redirige plutôt dans cet ordre : blender >out.txt 2>&1 mais je ne sais pas si ça change quelque chose.
    Note que tu peux aussi faire un blender 2>&1 | tee out.txt.
    • [^] # Re: le problème est dans blender

      Posté par  . Évalué à 4.

      Si l'ordre des redirections change :
      Exemple
      $ cmd >/dev/null 2>&1
      Etat Initial :

      1 : STDIN
      2 : STDERR

      1ere redirection

      1 : /dev/null
      2 : STDERR

      2eme redirection

      1 : /dev/null
      2 : /dev/null

      ----------------------------------
      2>&1 >/dev/null
      Etat Initial :

      1 : STDIN
      2 : STDERR

      1ere redirection

      1 : STDIN
      2 : STDIN

      2eme redirection

      1 : /dev/null
      2 : STDIN
      • [^] # Re: le problème est dans blender

        Posté par  . Évalué à 1.

        Bonne réponse; petite remarque, tu as juste écrit "STDIN" au lieu de "STDOUT", je pense que les connaisseurs auront corrigés d'eux-mêmes (peut-être pas les débutants).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.