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

 C++ Discussion :

cout et redirection unix


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Par défaut cout et redirection unix
    Bonjour,

    J'ai développé pour un projet scolaire une classe Matrices et développé le pivot de Gauss et la méthode de Jacobi le tous en C++.
    Franchement pas facile pour moi qui suit debutant en Dev et en math ;-)

    Le but du projet étant de comparer certaines informations sur les vitesses de convergence de matrices.

    Bon venant en au faite.

    Mon code fonctionne correctement et me retournes des lignes au format csv champ separateur ; afin que je puisse l'importer facilement dans excel pour l"analyse données.

    Si j’exécute mon programme. Tous ce passe correctement les lignes s'affiche au fur et a mesure sur l’écran.

    ce qui ressemble a ça
    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
     
    ./monprograme
    Jacobi;100;100;10000;0.500000000000000;1;0
    Jacobi;100;100;10000;0.050000000000000;1;0
    Jacobi;100;100;10000;0.005000000000000;2;0
    Jacobi;100;100;10000;0.000500000000000;3;0
    Jacobi;100;100;10000;0.000050000000000;5;10
    Jacobi;100;100;10000;0.000005000000000;6;0
    Jacobi;100;100;10000;0.000000500000000;6;10
    Jacobi;100;100;10000;0.000000050000000;8;0
    Jacobi;100;100;10000;0.000000005000000;9;10
    Jacobi;100;100;10000;0.000000000500000;10;10
    Jacobi;100;100;10000;0.000000000050000;11;10
    Jacobi;100;100;10000;0.000000000005000;12;0
    Jacobi;100;100;10000;0.000000000000500;13;10
    Jacobi;100;100;10000;0.000000000000050;14;10
    Jacobi;100;100;10000;0.000000000000005;15;10
    Gauss;100;100;10000;marge;99;30
    Jacobi;1000;1000;1000000;0.500000000000000;1;130
    Par contre, si j’exécute la commande suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./monprograme > fic.csv
    Et que depuis un autre terminal je controle le contenue du fichier fic.csv pendant l’exécution de mon programme, mon fichier est vide et le reste.
    Je vous assure qu'il doit y avoir des lignes très rapidement.
    Le programme est très très très long a s’exécuter ( d’ailleurs je ne sais pas combien temps ) car il y a beaucoup de calcul a faire.
    J'aurais aimer pouvoir consulter ce fichier pour voir en ai le boulot , cela me permettrais aussi d’évaluer le temps d’exécution total.
    genre avec une commande
    J'ai le meme problème si j’exécute la commande suivante Rien a l'ecran, rien dans le fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./monprograme | tee -a fic.csv
    Si je fait un Ctr+C , le fichier est toujours vide.

    Si je ne fait qu'un petit test rapide et que l'execution se termine tous de suite, le fichier contient bien des données.

    Vous aurez compris que j'attend que mon programme fonctionne comme les commandes unix et avec les I/O standard.

    J'utilise dans mon code des cout simple,
    Voici ceratainnement le plus compliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     cout<<"Gauss;"
          <<nbColonnes<<
          ";"<<nbLignes<<
          ";"<<(nbLignes*nbColonnes)<<
          //";"<<bornInf<<
          //";"<<bornSup<<
          ";"<<"marge"<<
          ";"<<count_iteration<<
          ";" << dureeG/(double)CLOCKS_PER_SEC*1000<<"\n" ;
    un autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cout<<setprecision(4)<<tableau[ ( l*nbColonnes ) + c ]<<" " ;
    Il doit y avoir quelque chose que je ne sais pas qui empeche mon programme de recevoir les IO standard de mon programme.

    Coté Linux , rien de spéciale, tous fonctionne correctement.

    les bibliothèques que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <iostream>
    #include "Matrices.h"
    #include <math.h>
    #include <cstdlib>
    #include <ctime>

    Je vous remerci de m'avoir lu et j'attend vos réponse avec impatience

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Je sais que la redirection vers un fichier, utilise un système de buffer (si je me rappelle bien) et donc, il faut une certaine quantité de données avant de pouvoir avoir un truc réellement dans le fichier. Enfin, j'ai un doute sur ce que je dit, mais je crois me rappeler de ce comportement.
    Code cplusplus : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cout<<"Gauss;"
          <<nbColonnes<<
          ";"<<nbLignes<<
          ";"<<(nbLignes*nbColonnes)<<
          //";"<<bornInf<<
          //";"<<bornSup<<
          ";"<<"marge"<<
          ";"<<count_iteration<<
          ";" << dureeG/(double)CLOCKS_PER_SEC*1000<<"\n" ;
    En plus, vous utilisez un '\n', pour le saut de ligne. Il est normalement conseillé d'utiliser le std::endl qui fait un saut de ligne, mais qui donne aussi un ordre de flush au flux.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Par défaut Merci
    En effet si je remplace les \n par endl je n'ai plus le problème.
    Encore merci

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Selon les situations, attention à ne pas faire trop de flush (et donc endl), ca pourrait franchement ralentir le programme.

    Ça n'a pas l'air d'être un problème dans ce cas précis.

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

Discussions similaires

  1. programme et redirection unix
    Par saturn1 dans le forum POSIX
    Réponses: 0
    Dernier message: 29/11/2009, 19h11
  2. [ shell UNIX ] redirection d'un resultat de tar
    Par donfab dans le forum Linux
    Réponses: 2
    Dernier message: 15/12/2007, 21h47
  3. Réponses: 3
    Dernier message: 12/12/2007, 20h31
  4. [UNIX output] et redirection
    Par BainE dans le forum Linux
    Réponses: 2
    Dernier message: 21/09/2007, 17h21
  5. [UNIX] exec() et redirection
    Par levit dans le forum Linux
    Réponses: 2
    Dernier message: 19/07/2007, 14h23

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