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. #21
    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 atum25 Voir le message
    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;
    }

    (Alors quelle importance qu'elle soit affichée dans la sortie standard ou pas ?)

    Bon sinon, je penses que la seule raison pour laquelle il n'y a pas de fonction spécial pour récupérer le contenu sous forme de string, par exemple, vient du fait que le type AsnAny (le type de base pris en paramètre dans ta fonction) est une structure qui ressemble à ceci :


    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
     
    typedef struct {
      BYTE  asnType;
      union {
        AsnInteger32        number;
        AsnUnsigned32       unsigned32;
        AsnCounter64        counter64;
        AsnOctetString      string;
        AsnBits             bits;
        AsnObjectIdentifier object;
        AsnSequence         sequence;
        AsnIPAddress        address;
        AsnCounter32        counter;
        AsnGauge32          gauge;
        AsnTimeticks        ticks;
        AsnOpaque           arbitrary;
      } asnValue;
    } AsnAny;
    il ne s'agit que de typedef pour des types primitifs, donc tout ce dont tu as besoin est déjà dans la librairie standard.

  2. #22
    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
    printf("%s",snmpVarList.list->value.asnValue.string.stream);
    la valeur stream est egal a ""

  3. #23
    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
    En cherchant des définitions, je suis tombé sur ce source :
    http://source.winehq.org/source/dlls/snmpapi/main.c
    qui est une implémentation de l'api snmp faite par wine.
    Du coup, il y a l'implémentation de la fonction Print que tu utilises, à la fin :
    SnmpUtilPrintAsnAny

  4. #24
    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 =D,

    Donc dans mon exemple il me faut case

    ASN_OCTETSTRING:
    592 {
    593 TRACE("String ");
    594 for (i = 0; i < any->asnValue.string.length; i++)
    595 TRACE("%c", any->asnValue.string.stream[i]);
    596 TRACE("\n");
    597 return;
    598 }

  5. #25
    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 atum25 Voir le message
    printf("%s",snmpVarList.list->value.asnValue.string.stream);
    la valeur stream est egal a ""
    il te manquait donc pas grand chose ici ^^ (il me semble que stream est un pointeur non ?)

  6. #26
    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 ne comprend pas ...

  7. #27
    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
    J'ai repris le code de la fonction que tu a trouver phill, mais j'arrive juste a afficher le "string" en console après ma fonction ne boucle plu dan le fort et s'arrete

    case ASN_OCTETSTRING:
    {
    cout<<"String ";
    for (i = 0; i < any->asnValue.string.length; i++)
    {
    // printf("%c", any->asnValue.string.stream[i]);
    cout<<any->asnValue.string.stream[i];
    }
    printf("\n");

  8. #28
    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
    Je ne suis pas CERTAIN qu'il s'agisse d'un OCTET_STRING, je n'ai fait que le supposer. Examine les champs pour en être sûr. Mieux : récupère toute la fonction et adapte la à ton code comme ça elle acceptera toute variable AsnAny.

  9. #29
    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 connais la fonction TRACE() est ce que c'est comme la fonction printf()?

  10. #30
    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
    C'est ce que g fais malgrès sa il plante

  11. #31
    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 atum25 Voir le message
    Je ne comprend pas ...
    stream est un pointeur, donc il faut employer la méthode marquée plus haut, avec la boucle for

  12. #32
    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
    case ASN_OCTETSTRING:
    {
    printf("String ");
    for (i = 0; i < /*any->asnValue.string.length*/ 10; i++)
    {
    printf("%s", any->asnValue.string.stream[i]);
    }

    printf("\n");
    break;
    }

    Lorceque j'execute, il entre bien dans ce case, puis dans le for, mais après la 1ere foi, il s'arrete. Si je met un point d'arrêt sur le break ou sur le printf("\n"), jamais il ny arrive et je comprend pas pourquoi

  13. #33
    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
    case ASN_OCTETSTRING:
    {
    printf("String ");
    for (i = 0; i < /*any->asnValue.string.length*/ 10; i++)
    {
    printf("%s", any->asnValue.string.stream[i]);
    }

    printf("\n");
    break;
    }

    Lorceque j'execute, il entre bien dans ce case, puis dans le for, mais après la 1ere foi, il s'arrete. Si je met un point d'arrêt sur le break ou sur le printf("\n"), jamais il ny arrive et je comprend pas pourquoi
    Logique, tu lui passes un caractère en guise de pointeur sur une chaine.
    c'est plutôt un %c qu'il faut faire.

  14. #34
    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
    Logique, tu lui passes un caractère en guise de pointeur sur une chaine.
    c'est plutôt un %c qu'il faut faire.
    rien à ajouter, à part que je ne comprends pas pourquoi tu as modifié la condition d'arrêt dans ta boucle for :/

  15. #35
    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
    Sa ne change rien, javais modifier pour tester, mais meme avec %c mon programme plante

  16. #36
    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
    J'avais changer pour essayer mais meme avec :

    case ASN_OCTETSTRING:
    {
    printf("String ");
    for (i = 0; i < any->asnValue.string.length; i++)
    {
    printf("%c", any->asnValue.string.stream[i]);
    }

    printf("\n");
    break;
    }

    la console affiche: "string" et après le curseur clignote et le programme est comme arreter

  17. #37
    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 atum25 Voir le message
    J'avais changer pour essayer mais meme avec :

    case ASN_OCTETSTRING:
    {
    printf("String ");
    for (i = 0; i < any->asnValue.string.length; i++)
    {
    printf("%c", any->asnValue.string.stream[i]);
    }

    printf("\n");
    break;
    }

    la console affiche: "string" et après le curseur clignote et le programme est comme arreter
    Premièrement, il existe des balise code pour les parties de ton post où tu intègres du code. Ensuite, si tu sais te servir d'un debugger comme gdb, regarde si tu n'as pas une segfault, le problème vient peut-être du fait que tu essaie d'accéder au contenur d'une valeur NULL. Le code que tu nous présente est (maintenant) bon, le problème vient donc d'ailleurs.

  18. #38
    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 mais sa devrait marcher, vu que sa marche avec la fonction d'origine, je ne comprend vraiment pas

  19. #39
    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 Kaamui Voir le message
    Premièrement, il existe des balise code pour les parties de ton post où tu intègres du code. Ensuite, si tu sais te servir d'un debugger comme gdb, regarde si tu n'as pas une segfault, le problème vient peut-être du fait que tu essaie d'accéder au contenur d'une valeur NULL. Le code que tu nous présente est (maintenant) bon, le problème vient donc d'ailleurs.
    J'ai rien à rajouter. A l'origine tu as présenté un problème de redirection de flux de sortie, on t'a aiguillé vers une solution qui parait plus logique. Maintenant y a l'aspect débuggage, et là ça sort un peu du cadre d'origine.

  20. #40
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    J'avais lu en diagonal cette après midi, vite fait, j'ai refait une lecture en diagonal dans l'autre sens, c'est pas mieux

    Je te propose ça, comme ça, vite fait dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (errorStatus==SNMP_ERRORSTATUS_NOERROR){
      AsnAny* any= &snmpVarList.list->value;
      if (any->asnType==ASN_OCTETSTRING)
        cout<< string(any->asnValue.string.stream, any->asnValue.string.length).c_str()<< endl;
    }

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

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