Retourner aux forums || Retourner au forum Astuces.divers

Astuces.divers : [Terminal] Fichier log ou affichage ?

Posté par Julien Sagnard () le 07 décembre 2003
0
mon_programme > log & tail -f log permet d'enregistrer la sortie d'un programme dans le fichier log et de l'afficher à l'écran en même temps.

> Lire le message (5 commentaires, moyenne: 1,2).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

Re: Fichier log ou affichage ?

Posté par cypher () le 11/12/2003 à 15:13. (lien). Évalué à 2.

mon_programme | tee log ,la commande tee est fait pour ce genre d'opération ;)

  • [^]Re: Fichier log ou affichage ?

    Posté par ludovic pollet (page perso, ) le 14/01/2004 à 15:41. (lien). Évalué à 1.

    tee bufferise et peut parfois mettre un bout de temps avant d'afficher un message déjà sorti par le programme...

    • [^]Re: Fichier log ou affichage ?

      Posté par cypher () le 16/03/2004 à 11:45. (lien). Évalué à 1.

      en méme temps "tee" est fait pour ca : dupliquer la sortie d'une commande dans un fichier :-) c'est je pense la facon la plus propre de le faire.

    • [^]Re: Fichier log ou affichage ?

      Posté par Blurps () le 04/05/2004 à 13:01. (lien). Évalué à 1.

      Faux. A moins que ton programme attaque les I/O à coups de read/write et non fread/fwrite, la bufferisation tu l'auras dans tous les coups. Quand tu rediriges ton flux sur un descripteur de fichier qui n'est pas un tty, la libc passe automatiquement stdout en bufferisation par bloque et non plus par ligne. Exemple:

      #include <stdlib.h>
      #include <stdio.h>
      #include <unistd.h>
      
      int main (void) {
        (void) fputs ("foo\nbar\n", stdout);
        for (; ; ) { pause (); }
        return 0;
      }
      
      Sur un tty, tu ne verras que "foo" (par ligne). Redirection vers un fichier: celui ci sera vide (par bloque). Et avec:
      mon_programme > log && tail -f log
      tu verras que rien ne s'affichera. Donc, définitivement, soit ton programme utilise syslog (ou tout autre système de log). S'il utilise le flux d'erreur à la place de stdout, essaie
      mon_programme 2>&1 | tee
      et là, surprise, on voit que tee ne bufferise même pas par ligne. Oui, il passe à la main stdout en non bufferisé.

      • [^]Re: Fichier log ou affichage ?

        Posté par Blurps () le 04/05/2004 à 13:04. (lien). Évalué à 1.

        Snirf, si ne colle pas le bon code:

        -  (void) fputs ("foo\nbar\n", stdout);
        +  (void) fputs ("foo\nbar", stdout);
        

Revenir en haut de page || Retourner aux forums || Retourner au forum Astuces.divers