stdout et console.

tabliertablier Membre
23:52 modifié dans API AppKit #1
Sous 10.4, j'utilisais printf pour écrire des données dans la console. En fait, printf écrit dans le stream Stdout.
  :( Sous 10.5, avec le même programme, ça marche dans la console ouverte depuis le debugger mais ça ne marche plus dans la console normale avec la version "release" de l'appli. Or, je ne détourne pas Stdout!
Une idée de ce que je devrais vérifier? Merci!

Réponses

  • Philippe49Philippe49 Membre
    23:52 modifié #2
    C'est pareil avec fprintf(stdout,".......    ?
  • tabliertablier Membre
    23:52 modifié #3
    Oui, pareil. MAIS je vais modifier ce que j'ai dit en fonction de mes tests.
    En fait, sous 10.4 la console affichait "immédiatement" les printf.
    Sous 10.5:
    Dans la console debugger les messages s'affichent immédiatement
    La console normale affiche mes messages lorsque je ferme l'application qui les a envoyé! Or cette application envoie plusieurs séries de message. Ne pas pouvoir les lire au fur et à  mesure ça ne présente pas d'intérêt!

    Donc, soit quelqu'un a une idée que je peux essayer, soit je vais chercher une autre voie pour afficher ces messages.
  • MalaMala Membre, Modérateur
    23:52 modifié #4
    <br />fflush(stdout);<br />
    

    Cela n'y change rien?
  • tabliertablier Membre
    23:52 modifié #5
      ::) C'est à  essayer.
    Il y a plus de 15 ans que je n'ai pas travailler sous Unix, alors j'ai vachement oublié!
  • tabliertablier Membre
    23:52 modifié #6
      ça marche! Mon évaluation première du problème était mauvaise!
    Il me reste donc une question: lorsqu'une application occupe trop le CPU, comment fait-on pour laisser un petit temps aux autres applications ?
  • Philippe49Philippe49 Membre
    23:52 modifié #7
    Pour éviter de mettre fflush(stdout) à  toute écriture, tu peux gérer le buffer d'un coup par
    setvbuf(stdout,NULL,_IOLBF,0);
    

    Cela impose le vidage du buffer de stdout sous le mode classique. (voir la page man de setvbuf)

    Pour la question de la gestion du CPU, je pense essentiellement que ce n'est pas notre problème. La commande unix "nice" lance l'exécution en définissant un rang de priorité.
  • tabliertablier Membre
    23:52 modifié #8
      :-\\ Ah! la nouvelle console! j'y comprends rien de rien!
    Le printf et le fflush sont dans une boucle qui peut tourner plus de 10.000 fois! A chaque passage de quatre à  cinq lignes sont générées.
    Le début des impressions arrive dans la console des messages et se poursuit (déborde?) dans le  'system.log'.  De plus, la console ajoute des informations au début de toutes les lignes du texte.
    C'est incompréhensible, rien à  voir avec l'ancienne console qui affichait simplement les textes imprimés par printf!
    Je n'ai pas essayer le 'setvbuf' je vais le faire, mais je pense que ça ne changera rien!
      >:D Grrrrrrrrrrrrrrrrrrrrrrrrrrrr!!!!

    Nota: sous 10.5.8
Connectez-vous ou Inscrivez-vous pour répondre.