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 :

Console flux de sortie


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut Console flux de sortie
    Bonjour,

    J'ai un problème, j'aimerais intercepter le flux de sortie sur la console, afin de l'ecrire dans un fichier texte.
    Le flux est envoyer par la fonction SnmpUtilPrintAsnAny.

    Ou alors si cela n'est pas possible, j'aimerai une methode afin de lire ce qui a été afficher dans la console.

    Voila Merci a ceux qui prendront le temps de me lire et si possible me repondre.
    =)

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Points : 58
    Points
    58
    Par défaut
    Salut,

    Tu peux rediriger le flux de sortie sur un fichier . Cependant le texte ne s'affichera plus sur la console du coup.

  3. #3
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Merci, j'avais vu cet exemple, mais comme la fonction qui affiche en console, n'est pas la fonction "cout()", je n'y arrive pas.

    Enfaite c'est la fonction SnmpUtilPrintAsnAny(); qui ecrit sur la console ... j'ai une variables qui n'est accessiblme que par cette fonction et seulement en console, j'aimerai pouvoir récuperer cette valeur,

    si tu a une idée !!

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Points : 58
    Points
    58
    Par défaut
    Attention, cout n'est pas une fonction mais un flux.

    Es-tu sûr que tu as bien testé la solution du lien que je t'ai donné car d'après la msdn :

    The SnmpUtilPrintAsnAny function prints the value of the Any parameter to the standard output.
    Et le standard output c'est cout il me semble.

  5. #5
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    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
     
    streambuf *psbuf, *backup;
    ofstream filestr;
    filestr.open ("test.txt");
     
    backup = cout.rdbuf();     // back up cout's streambuf
     
    psbuf = filestr.rdbuf();   // get file's streambuf
    cout.rdbuf(psbuf);         // assign streambuf to cout
     
    //cout << "This is written to the file";
    SnmpUtilPrintAsnAny(&snmpVarList.list[0].value);
     
    cout.rdbuf(backup);        // restore cout's original streambuf
     
    filestr.close();
     
    return 0;
    Voila j'ai copier coller le lien que tu ma donner, si tu voi un probleme

  6. #6
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    SnmpUtilPrintAsnAny(&snmpVarList.list[0].value); s'affiche toujours dans la console, malgrès le code que tu ma donnée =S

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Bien que je ne l'ai jamais essayée, je ne suis pas sûr que cette façon de rediriger la sortie standard fonctionne dans le cas d'une fonction compilée dans une librairie séparée, puisque je ne vois pas comment il peut accéder à ton exemplaire de cout. Mais j'avoue ne pas bien connaitre le sujet.

    Le fait est que SnmpUtilPrintAsnAny est une fonction de debuggage, qui ne devrait jamais être utilisée en dehors de petits programmes destinés à des tests.
    Si tu veux vraiment récupérer la valeur d'une variable AsnAny sous la forme d'un texte, c'est un peu à toi à coder une fonction qui interprete la structure et la convertir en texte (à moins qu'il existe une fonction toute prête).

    Si tu veux juste récupérer la sortie d'un programme de test pour la stocker dans un fichier tabulé et la traiter dans une application genre Excel, il vaut mieux rediriger toute la sortie de ton programme, via la ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monprogramme.exe >fichier.txt
    Evidemment, un programme appelant le tien peut simuler ce genre de comportement en utilisant certains paramètres de la fonction CreateProcess().

  8. #8
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Le probleme c'est que cette variable est stocker dans une structure, la seul facon que j'ai de la voir est d'utiliser la fonction SnmputilPrintAsnAny, autrement je ne sais pas dans quelle champ elle est stocker avec l'inspecteur de variable aucun champ ne correspond a ce que j'affiche avec cette fonction, donc pour crée moi mm la fonction c'est difficile,

    je n'ai pas compris la redirection de tt mon programme en ligne de commande tu peux m'en dire plus stp

  9. #9
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Le probleme c'est que cette variable est stocker dans une structure, la seul facon que j'ai de la voir est d'utiliser la fonction SnmputilPrintAsnAny, autrement je ne sais pas dans quelle champ elle est stocker avec l'inspecteur de variable aucun champ ne correspond a ce que j'affiche avec cette fonction, donc pour crée moi mm la fonction c'est difficile,
    Donc en fait ton problème, ce n'est pas d'utiliser la fonction SnmpUtilPrintAsnAny(), mais plutôt comment décoder la structure AsnAny.
    Si tu n'es pas familier avec les unions, je te conseille d'y jeter un oeil.
    Sinon, je suis prêt à parier que tu trouveras sur le net bcp d'exemples de code qui font ce que tu cherches à faire.

    je n'ai pas compris la redirection de tt mon programme en ligne de commande tu peux m'en dire plus stp
    Tout programme possède, à son lancement, 3 "fichiers" ouverts : la sortie standard, la sortie d'erreur, et l'entrée standard.
    Par défaut, la sortie standard s'en va vers la console, mais tu peux rediriger cette sortie vers un fichier, en utilisant la syntaxe que je t'ai montré.
    Par exemple, si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dir c:\ >fichier.txt
    Tu vas te retrouver avec un nouveau fichier "fichier.txt" qui contient le listing de la racine de ton disque C.
    Donc si à la place de dir tu lances ton programme, sa sortie sera écrite dans ce fichier plutôt qu'à l'écran. A mon avis, un essai vaut mieux qu'un long discours.

  10. #10
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Je viens d'essayer la redirection, en efait sa marche bien, mais comment puis-je integrer cette redirection dans mon programme en c++ ??

  11. #11
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    bonjour,

    peu importe la façon dont on essaie de redirigier le flux une fois la fonction snmprint...etc exécutée, puisque au passage dans la fonction l'affichage est effectué dans le flux standard.

    si tu veux, il y a peut-être moyen d'intercepter le contenu envoyé vers le flux standard pour "l'afficher" dans un fichier, mais rien pour empêcher cette méthode de faire son travail, à priori.

    Pour le moyen d'intercepter le contenu envoyé au flux standard, je n'en connais pas mais la solution de Phi1981 semble être bonne
    Nullius in verba

  12. #12
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    tu as l'air de bien connaitre la fonction SnmpUtilPrintAsnAny, si je ne peux la rediriger autre part que la console comment puis-je utiliser ma variable sans cette fonction?

  13. #13
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Là ça devient compliqué. Il y a surement une façon plus simple, mais tu peux créer un programme appelant et avec CreateProcess lui donner un handle STDOUT différent (google CreateProcess redirection stdout devrait te donner plein d'exemples). Mais honnêtement, à ta place, je réfléchirais pour savoir si c'est vraiment ça que tu veux faire. Ca me parait très compliqué par rapport à simplement décoder le contenu d'une structure.

  14. #14
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Oui je trouve aussi que sa devien trop compliquer, mais alors comment fair pour decoder cette structure, g beau regarder dans touts les champs, ya rien qui ressemble a mon resultat

  15. #15
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par phi1981 Voir le message
    Là ça devient compliqué. Il y a surement une façon plus simple, mais tu peux créer un programme appelant et avec CreateProcess lui donner un handle STDOUT différent (google CreateProcess redirection stdout devrait te donner plein d'exemples). Mais honnêtement, à ta place, je réfléchirais pour savoir si c'est vraiment ça que tu veux faire. Ca me parait très compliqué par rapport à simplement décoder le contenu d'une structure.
    Je suis d'accord avec vous, les méthodes proposées ou possibles vont bien loin, juste pour récupérer le contenu d'une structure en dehors de la sortie standard)

    Pour la méthode, non je la découvre dans ce post, mais je lu sa doc sur msdn et je constate qu'elle a pour rôle d'afficher la valeur de l'argument qu'elle contient dans la sortie standard. De ce fait, difficile de proprement détourner son fonctionnement pour en faire ce que tu souhaites apparemment.

    Peux tu simplement expliquer ton objectif premier ? Avoir une sorte de log sur le contenu de ta variable passée en argument ? empêcher la fonction d'afficher son résultat dans la sortie standard ?

    Est-ce que l'utilisation de cette fonction fait partie des contraintes ? (j'entends par là quelles sont vos obligations, les points obligatoires à votre exercice ? )
    Nullius in verba

  16. #16
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Citation Envoyé par atum25 Voir le message
    Oui je trouve aussi que sa devien trop compliquer, mais alors comment fair pour decoder cette structure, g beau regarder dans touts les champs, ya rien qui ressemble a mon resultat
    C'est à dire ? quelle sortie obtiens tu sur la console, et quelle est la valeur des différents champs de ta structure ?
    Y a pas de miracle, si la fonction Win32 arrive à déchiffrer cette structure, c'est que tu le peux aussi, avec un peu de volonté.

  17. #17
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Mon objectif premier est de savoir quelle machine est brancher sur quel port du switch.

    J'ai choisi d'utiliser snmp.

    J'ai trouver la fonction SnmpMgrRequest(session,SNMP_PDU_GET,&snmpVarList,&errorStatus,&errorIndex)
    qui avec un oid particulier renvoi la valeur de cette oid.

    dans cette exemple le nom de mon switch par exemple.

    Après sa je cherche a stocker ma variable dans une autre variable afin de la mettre dans une base de donnée.

    Le probleme est que la seul facon que j'ai de voir le resultat et d'utiliser la fonction SnmpUtilPrintAsnAny(&snmpVarList.list->value)
    en lui passant une structure renvoyer par la requete voila je met mon code avec.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    int main(int argc, char* argv[])
    {
            SnmpVarBindList snmpVarList;
            AsnInteger errorStatus,errorIndex;
            LPSNMP_MGR_SESSION session;
            char resultat[MAX_PATH];
     
            //Initialisation snmpVarList
            snmpVarList.list = NULL;
            snmpVarList.len = 1;
            snmpVarList.list = (SnmpVarBind *)realloc(snmpVarList.list, sizeof(SnmpVarBind) *snmpVarList.len);
     
            //Ouverture de Session
            session = SnmpMgrOpen("192.168.2.82","public",1000,3);
            if (session!=0)
            {
                    SnmpMgrStrToOid(".1.3.6.1.4.1.11.2.14.11.5.1.10.6.1.2.0.38.241.99.134.128",&snmpVarList.list->name);
                    //Envoi de la requete
                    if (SnmpMgrRequest(session,SNMP_PDU_GET,&snmpVarList,&errorStatus,&errorIndex)!=0)
                    {
                            if (errorStatus==SNMP_ERRORSTATUS_NOERROR)
                            {
                                    SnmpUtilPrintAsnAny(&snmpVarList.list->value);
                            }
     
                    }
                    //Fermeture de la session
                    SnmpMgrClose(session);
     
                    system("PAUSE");
            }
            return 0;
    }

  18. #18
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Sur la console, j'obtiens " String procurve switch 2510-48"

    dans &snmpVarList.list->value

    j'ai 2 champs :
    -AsnType = '\x04' 4 (0x04)

    -AsnValue = {23,23,...

  19. #19
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Le champ AsnValue est une union, c'est à dire, pour simplifier dans ton cas, qu'un seul des champs de cette union est valide. Le champ valide, c'est celui qui est identifié par AsnType. En jetant rapidement un oeil j'ai eu l'impression qu'il s'agissait de ASN_OCTETSTRING, mais j'ai regardé trop vite pour en être certain. Maintenant, il faut que tu comprennes comment décomposer le champ qui t'interesse. Il est très probable que le sous-champ string contienne un tableau d'octets qui contient ta chaine de caractère, ou qqchose comme ça.

    Edit : par exemple, je suppose que si tu passes le contenu de values->string.stream à une fonction bête et bornée style printf, je ne serais pas étonné que tu obtiennes ce qui t'interesse. mais j'en suis pas certain, je connais pas du tout l'api snmp.

  20. #20
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    la valeur de AsnOctetString est = > :00904C54 "dg\x19\x01Ô4"

    Alors que mon résultat est "string hp procurve switch 2510-48"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 5 12345 DernièreDernière

Discussions similaires

  1. Traiter les flux de sortie
    Par soulhouf dans le forum Linux
    Réponses: 9
    Dernier message: 20/04/2006, 17h48
  2. [Java 1.5] Process : afficher le flux de sortie
    Par Zapan dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 11/01/2006, 10h34
  3. [MySQL] Flux de sortie : ob_start + header
    Par ToxiZz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/12/2005, 23h56
  4. Awk - changer le flux de sortie
    Par Longrais dans le forum Linux
    Réponses: 1
    Dernier message: 16/08/2005, 17h11
  5. [Console] Tampon de sortie et endl
    Par Évariste Galois dans le forum C++
    Réponses: 18
    Dernier message: 09/07/2005, 17h48

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