IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèque standard C Discussion :

forcer l'écriture de buffer


Sujet :

Bibliothèque standard C

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Points : 56
    Points
    56
    Par défaut forcer l'écriture de buffer
    Bonjour tout le monde;

    je désire récupérer l'ensemble des messages affichés pas mon programme dans un fichier texte, pour ce la je tente de faire une redirection sur un fichier comme suite: ./prog > log.txt

    le problème est que, quand j'arrête le programme et je regarde le fichier log.txt je ne trouve pas une grande partie des messages (en l’occurrence les derniers).
    NB: mon programe est écrit en c et les affichage sont fait par printf.

    y'a il une solution à ce problème?

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 629
    Points : 30 859
    Points
    30 859
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sofiane80 Voir le message
    Bonjour tout le monde;

    je désire récupérer l'ensemble des messages affichés pas mon programme dans un fichier texte, pour ce la je tente de faire une redirection sur un fichier comme suite: ./prog > log.txt

    le problème est que, quand j'arrête le programme et je regarde le fichier log.txt je ne trouve pas une grande partie des messages (en l’occurrence les derniers).
    NB: mon programe est écrit en c et les affichage sont fait par printf.

    y'a il une solution à ce problème?
    Il s'agit probablement d'un problème de buffer. Dans une entrée/sortie de type "longue" (écran, disque), l'IO est bufferisée (mise en mémoire) et finalisée que quand c'est nécessaire. Ca donne un gain de vitesse au programme mais si tu l'interromp avant la finalisation de l'IO, la mémoire est perdue.

    Rajoute l'instructions fflush(stdout) juste après les printf importants et t'auras la garantie que ceux-ci seront réellement écris au moment où ils s'exécutent.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 148
    Points : 28 113
    Points
    28 113
    Par défaut
    Bonjour,

    Les entrées sorties sont effectivement bufferisées en C.

    Deux moyens possibles pour forcer le flush du buffer, et ainsi avoir ce qui est écrit au moment où c'est écrit, et non plus tard :
    • terminer chaque chaine passée à printf par \n
    • appeler fflush sur le buffer concerné
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Points : 56
    Points
    56
    Par défaut resolu
    bonjour,

    effectivement c'était le fflush sur stdout qui manquait dans mon code, d'ailleur je n'en ai rajouté qu'un seul à la fin de l'éxecution et c'est réglé.

    parcontre le \n à la fin de chaque chaine passée au printf, je pense que ce n'était pas la bonne solution pour mon problème parce que tout mes message ce terminent par \n.

    merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Forcer l'écriture sur un flux de sortie ?
    Par Alfred83 dans le forum SL & STL
    Réponses: 3
    Dernier message: 29/05/2007, 13h05
  2. Forcer l'écriture sur un flux de sortie ?
    Par Alfred83 dans le forum C++
    Réponses: 3
    Dernier message: 29/05/2007, 13h05
  3. forcer l'écriture sur 4 positions
    Par dassise dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 26/10/2006, 23h28
  4. Forcer le vidage du buffer d'écriture (flush)
    Par YOY205 dans le forum Fortran
    Réponses: 4
    Dernier message: 27/05/2006, 14h33
  5. forcer l'écriture d'un champ de formulaire
    Par goma771 dans le forum Langage
    Réponses: 7
    Dernier message: 21/02/2006, 19h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo