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

Réseau C Discussion :

Problème de buffer avec des int et des char


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 16
    Points
    16
    Par défaut Problème de buffer avec des int et des char
    Bonjour,

    Voila, j'aimerais créer un buffer pour stocker un certains nombres de valeurs.

    J'ai malheuresement deux problèmes :

    - comment mettre dans un même buffer des valeurs ayant des types différents (char, int ) ?

    - comment calculer la taille d'un int ?


    Voila la structure que j'ai crée dans laquelle j'ai mis toutes les données que je voudrais mettre dans le buffer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct tramesnmp
    {
    char version[2];
    char comunity[10];
    int trap;
    char ObjectId[30];
    unsigned long manager_addr;
    int error;
    int specific;
    int lgbuf;
    char donnee[100];
     
    }TRAP;
    Mon but est de créer à la main un TRAP SNMP à envoyer à un manager SNMP.

    Si vous aviez quelques idées, parce que je tourne en rond la

    Si vous voulez des précisions, n'hésitez pas

    D'avance merci pour une devellopeuse en mal d'inspiration

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Lolita59
    - comment mettre dans un même buffer des valeurs ayant des types différents (char, int ) ?
    Tu fais un buffer du type le plus gros.
    Par exemple un int est plus grand qu'un char mais plus petit qu'on long

    - comment calculer la taille d'un int ?
    printf("%d\n", sizeof(int));
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Salut

    Tu peux faire des union
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef union  {
        char char_val;
        int int_val;
    } char_ou_int;
    La taille de l'union est la taille du plus grand champ (ici int)

  4. #4
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Par extension, tu peux avoir une structure polymorphe de ce genre (c'est assez frequent)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef struct {
      union {
        struct {
          int a;
          int b;
        } type_a;
        struct {
           char k;
           float t;
          const char * str;
         } type_b;
      } valeurs;
      enum { TYPE_A, TYPE_B } type;
    } mon_type_polymorphe;

  5. #5
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Lolita59
    - comment mettre dans un même buffer des valeurs ayant des types différents (char, int ) ?
    Si l'alignement de tes données n'as pas d'importance, dans ce cas tu peux peut être "mapper" directement ta structure dans ton buffer.

    Citation Envoyé par Lolita59
    - comment calculer la taille d'un int ?
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 16
    Points
    16
    Par défaut
    et si je passe par sprintf pour changer mes int en char c bon ou je risque quelque chose ?

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lolita59
    Mon but est de créer à la main un TRAP SNMP à envoyer à un manager SNMP.
    Le manager SNMP attend quel genre de format ?
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Lolita59
    et si je passe par sprintf pour changer mes int en char c bon ou je risque quelque chose ?

    Si tu change tes int en char tu perds de la données
    Un int vaut 4 octets
    Un char en vaut 1 seul

    Tu peux en revanche mettre un int dans un char*.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *buffer = malloc(50);
    if(buffer != NULL) {
        sprintf(buffer, "%d", monentier);
    }
    [...]
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Le manager SNMP attend quel genre de format ?

    Quel genre ? c'est à dire ?

    une trame comportant les informations de la structure ci dessus

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lolita59
    Quel genre ? c'est à dire ?

    une trame comportant les informations de la structure ci dessus
    Si c'est une structure spécifiée par le manager SNMP, je ne vois pas trop où est le problème et l'objet de ta question initiale.

    Il suffit de remplir la structure avec les données requises et de la passer au manager SNMP via la fonction prévue à cet effet (genre SNMP_trap_send()).

    La trame SNMP (qui est quelque chose de compliqué codé en BER) est gérée par le manager qui la mettra dans le socket qui va bien...

    Ca m'étonnerait fort qu'on te demande de faire l'encodage BER à la main (a pain in the ass), alors que c'est le travail de n'importe quel gestionnaire de SNMP, sauf si il ne connait les TRAP SNMP. Dans ce cas, il faut utiliser des fonctions de bas niveau du gestionnaire pour former le TRAP à partir des données de celui-ci. C'est nettement plus complexe...
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 16
    Points
    16
    Par défaut
    Bah disons que comme la trame snmp je la code à la main, il me faut tout mettre dans un meme buffer avant de l'envoyer c la qu'est mon problème en réalité.

    En fait j'envoie moi-même le buffer au manager, je ne passe pas par un codage BER en ASN.1.

    Sinon j'ai aussi un pb avec un unsigned long, je ne vois pas comment le faire passer dans le meme type que les autres pour les mettre dans le buffer.



    PS : merci beaucoup de m'aider si vite

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 16
    Points
    16
    Par défaut
    Le but de mon projet est de remonter les alarmes d'un PABX vers un manager snmp. Ce PABX ne posséde pas d'agent SNMP et ils veulent pas en mettre parce que ça prend de la place.

    ....donc si, je le code à la main

    SNMP_trap_send() <---- c une librairie spéciale ou quelque chose dans le genre ?

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lolita59
    En fait j'envoie moi-même le buffer au manager, je ne passe pas par un codage BER en ASN.1.
    What ? Tu vas balancer sur le réseau un format de TRAP SNMP non standard ?
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 16
    Points
    16
    Par défaut
    Bah j'espere qu'il ressemblera suffisament à un TRAP standart pour etre reconnu par le manager.... tu me fais peur la

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lolita59
    Le but de mon projet est de remonter les alarmes d'un PABX vers un manager snmp. Ce PABX ne posséde pas d'agent SNMP et ils veulent pas en mettre parce que ça prend de la place.

    ....donc si, je le code à la main
    [/code]
    Pour que le TRAP SNMP soit interprétable par le manager SNMP, le format doit être conforme à la norme. Et là, il n'y a pas le choix, c'est BER, et c'est pas drôle. Il doit exister des bibliothèques de gestion des BER...
    [code]
    SNMP_trap_send() <---- c une librairie spéciale ou quelque chose dans le genre ?
    C'est la fonction magique dont tu aurais besoin... Quel est le système et l'architecture du PABX ?

    C'est vrai qu'il faudrait un agent SNMP, mais il est possible qu'il en existe de très simple qui ne font que fabriquer des traps à partir des données et les envoyer sur le réseau via une socket UDP/IP...
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 16
    Points
    16
    Par défaut
    systèmes repartis sur OSE.

    Bon, sinon je vois pas du tout comment faire.

    J'avoue que je pensais qu'en faisant mon joli petit buffer et en le mettant dans une socket UDP, il comprendrait en recevant le truc.



    .....a y est je déprime

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lolita59
    Bah j'espere qu'il ressemblera suffisament à un TRAP standart pour etre reconnu par le manager.... tu me fais peur la
    As-tu déjà vu un dump de TRAP SNMP ? Le codage BER, ça ne s'improvise pas !
    J'ai commencé à me pencher sur le sujet...

    http://emmanuel-delahaye.developpez.com/ber/ber.htm

    c'est pas rien, et il y a probablement des erreurs...

    Peut être du code ici :

    http://www.mozilla.org/directory/sourcedocs.html
    encode.c (functions for BER-encoding data)
    http://www.opensource.apple.com/darw...blber/encode.c
    Et voilà ! (évidemment, il va falloir fouiller autour pour récupérer ce qui manque...)
    Merci Google !
    Pas de Wi-Fi à la maison : CPL

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lolita59
    systèmes repartis sur OSE.

    Bon, sinon je vois pas du tout comment faire.

    J'avoue que je pensais qu'en faisant mon joli petit buffer et en le mettant dans une socket UDP, il comprendrait en recevant le truc.

    .....a y est je déprime
    Si tu lui balances n'importe quoi, il ne va rien comprendre ! C'est garanti !

    Il y a certes in forma 'fonctionnel' qui décrit un TRAP SNMP, mais en dessous, il y a un format 'physique' (BER) et ça, tu n'y coupes pas...

    Qu'est-ce qu'on t'a donné comme format de données ?
    Tu n'as pas un chef de projet qui sait de quoi il parle ? (Oui, je sais, c'est rare) C'est un stage, un CDI ?
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 16
    Points
    16
    Par défaut
    c'est un stage...

    pour le format j'ai bien une doc qui tente d'expliquer comment fonctionne le codage ASN.1 mais on m'a rien dit j'avoue.

    En fait j'étais partie complétement à coté j'ai l'impression.

    Sinon il y a bien quelqu'un qui a l'air de s'y connaitre un peu mais j'ai tellement du mal à cerner le truc que j'arrive pas à formuler des questions précises.

  20. #20
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    [HORS SUJET GRAVE... -> forum réseau ?]
    Citation Envoyé par Lolita59
    c'est un stage...

    pour le format j'ai bien une doc qui tente d'expliquer comment fonctionne le codage ASN.1 mais on m'a rien dit j'avoue.

    En fait j'étais partie complétement à coté j'ai l'impression.

    Sinon il y a bien quelqu'un qui a l'air de s'y connaitre un peu mais j'ai tellement du mal à cerner le truc que j'arrive pas à formuler des questions précises.
    ASN.1, c'est pas une norme de codage, mais une norme de spécification abstraite (indépendante de toute implémentation) de format de données.

    http://www.httr.ups-tlse.fr/pedagogi...nmp/snmp41.htm
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/10/2009, 10h36
  2. Réponses: 11
    Dernier message: 29/06/2009, 22h20
  3. Problème de buffering avec video flash
    Par testicool dans le forum Intégration
    Réponses: 1
    Dernier message: 13/06/2008, 10h34
  4. Réponses: 19
    Dernier message: 30/05/2006, 18h43
  5. comment mettre des int dans une char??
    Par gronaze dans le forum C
    Réponses: 5
    Dernier message: 21/04/2006, 17h02

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