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 :

Sortie standard


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Par défaut Sortie standard
    Bonjour,

    Je dois dans un programme faire appel à une méthode d'une librairie c++. Seulement, cette méthode redirige la sortie standard vers un fichier. Du coup , au retour de cette méthode, toutes mes traces s'affichent dans ce fichier et non plus dans la console. Comment puis-je à la sortie de cette méthode signaler que la sortie standard doit à nouveau être la sortie écran.

    Merci d'avance.

  2. #2
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    Hummm à vue de nez, l'astuce consisterais à avoir un pipe et à rediriger vers ce pipe avant l'appel de la méthode puis à reprendre la main.

    Mais je ne garanti rien, c'est juste une idée.

    Ca m'étonne qu'il n'y ait pas une méthode pour rendre la main, c'est assez mal coder si cet le cas.

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Par défaut
    Excuse moi mais mon niveau de c++ n'est pas très élevé. Aurais-tu un exemple de code.

    Desole et merci.

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Tu devrais étudier les possibilités de ta bibliothèque (!= librairie), qui si elle est bien faite devrait permettre une restauration.
    Sinon c'est spécifique à chaque OS, voire chaque compilo. Sous Windows:
    http://www.developpez.net/forums/vie...238454#2238454

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Par défaut
    Pour ma part, j'utilise linux.

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Si'il s'agit d'un flux de type cout, et que la fonction le redirige à l'aide des outils standards du C++ (deux hypothèses fortes), tu peux sauvegarder sa destination initiale avant l'appel de la fonction à l'aide de rdbuf (la fonction sans paramètres), puis le restaurer à l'aide de l'autre fonction rdbuf.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    Mais heu, tout le monde se met aux avatars Actarus/Goldorak ma parole!

    Tiens, je ne connaissais pas cette fonftion.

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Par défaut
    J'ai essayé comme tu disais (si je me trompe pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::streambuf* saveCout = cout.rdbuf();
    ...
    appel_methode();
    ...
    cout.rdbuf(saveCout);
    Seulement le compilateur detecte une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Error: Too many arguments in call to "ios::rdbuf()".
    Je suis sous unix.

    Merci d'avance.

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Par défaut
    Juste une petite précision, quelle est la différence entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <iostream.h>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <iostream>
    Merci.

  10. #10
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Par défaut
    est-ce que mon erreur pourrait provenir de ca ?

  12. #12
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Si tu utilises iostream.h, peut être. Mais même c'est pas aussi simple, car le streambuf que tu "sauvegardes" sera détruit lors de la redirection de cout.

  13. #13
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::streambuf* saveCout = cout.rdbuf();
    ...
    appel_methode();
    ...
    cout.rdbuf(saveCout);
    puis
    Error: Too many arguments in call to "ios::rdbuf()".
    Dans le deuxieme appel à rdbuf tu fournis un argument en trop, car elle n'attend pas d'argument...

    Donc je crois qu'il faut réinitialiser cout avec le rdbuf de saveCout

  14. #14
    Membre éprouvé
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Par défaut
    Mais si je fais une simple affectation il ne se passe rien. De plus, tous les exemples que j'ai pu trouver sur le net utilisaient rdbuf() avec un paramètre afin de réinitialiser cout.

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Deux version existent pour rdbuf() : une sans paramètre qui renvoie le streambuf, et une autre prenant en paramètre un nouveau.

  16. #16
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Le code suivant marche chez moi :

    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
    #include <iostream>
    #include <fstream>
     
    using namespace std;
     
    int main()
    {
    	cout << "1" << endl;
    	ofstream os ("c:/temp/toto.txt");
    	streambuf *s = cout.rdbuf();
    	cout.rdbuf(os.rdbuf());
    	cout << "2" << endl;
    	cout.rdbuf(s);
    	cout << "3" << endl;
    	cin.ignore();
     
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. PB sortie standard avec les PTHREAD !!!
    Par djspit dans le forum C++
    Réponses: 15
    Dernier message: 19/11/2004, 01h17
  2. [langage] sortie standard linux
    Par ebaynaud dans le forum Langage
    Réponses: 8
    Dernier message: 14/10/2004, 08h05
  3. rediriger la sortie standard vers un textarea
    Par gromite dans le forum Composants
    Réponses: 9
    Dernier message: 10/05/2004, 11h07
  4. Réponses: 5
    Dernier message: 24/12/2003, 09h49
  5. Réponses: 16
    Dernier message: 18/07/2003, 17h16

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