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 :

Implémentation, taille d'un membre


Sujet :

Réseau C

  1. #1
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut Implémentation, taille d'un membre
    Bonjour,

    J'ai une structure donnée (ici un socket unix)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	struct  sockaddr_un {
    		short   sun_family;     /* AF_UNIX */
    		char    sun_path[108];      /* path name (gag) */
    	};
    La question que je me pose c'est comment connaitre la taille du membre sun_path ?

    En effet sa taille dépend de l'implémentation, rien n'oblige d'avoir toujours 108, on pourrait avoir 107 par exemple sur une autre architecture (et la pouf catastrophe).

    On doit obligatoirement avoir une constante dans un coin avec la taille,
    ou il y a un moyen de connaitre cette taille avec sizeof ?


  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct  sockaddr_un s;
     
    size_t i = sizeof(s.sun_path) / sizeof(char);
    Devrait fonctionner

  3. #3
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    Le "/ sizeof(char)" est innutile car toujours 1 ? non ?

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    En principe oui, mais si par l'avenir ils sortent une architecture ou char n'est pas sur 1 octet, ça ne marchera plus

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Pikwik
    La question que je me pose c'est comment connaitre la taille du membre sun_path ?
    "C'est pas la taille qui compte, c'est la façon de s'en servir".
    il y a un moyen de connaitre cette taille avec sizeof ?
    Ben oui, qu'est-ce qui empêcherait ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par millie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct  sockaddr_un s;
     
    int i = sizeof(s.sun_path) / sizeof(char);
    Devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct  sockaddr_un s;
     
    size_t i = sizeof s.sun_path;
    sizeof (char) vaut 1 par définition.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par millie
    En principe oui, mais si par l'avenir ils sortent une architecture ou char n'est pas sur 1 octet, ça ne marchera plus
    N'existe pas. char est l'unité de compte. Une unité vaut 1 par définition.

  8. #8
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    "C'est pas la taille qui compte, c'est la façon de s'en servir".
    Jolie !!!!

    Merci de vos réponse.

    PS: 108 me parait un peut petit quand même... Pour un chemin bien sûr !

  9. #9
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Pikwik
    PS: 108 me parait un peut petit quand même... Pour un chemin bien sûr !
    Pour la taille d'un chemin de fichier tu as FILENAME_MAX (stdio.h).

    Le sizeof char n'est n'est pas obligatoire dans ce cas mais si tu veux faire quelque chose de générique par la suite ça évite les ennuies : Connaître le nombre d'éléments d'un tableau

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Pikwik
    Jolie !!!!
    C'est pas de moi, mais je trouvais le cadre particulièrement adéquate !
    108 me parait un peut petit quand même... Pour un chemin bien sûr !
    Je ne suis pas sûr que tu ait à te soucier de ça. Les transferts de données se font avec send(), à qui on demande ce qu'on veut, et qui répond ce qu'il peut. A toi ensuite de gérer le découpage avec une boucle...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BEGIN
      i := 0  
      DO
       n := send (socket, big_buffer + i, size)
       i := i + n
      WHILE i < size
    END
    Evidemment, en réception, on a intérêt a avoir un repère pour savoir que c'est la fin de donnée (taille, marqueur...). Bref, il faut un minimum de protocole...

  11. #11
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    Pour info sun_path ne sert que pour la créatation bind / connect du socket.

    donc je trouve que 107 caractères pour un chemin c'est juste

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Pikwik
    Pour info sun_path ne sert que pour la créatation bind / connect du socket.

    donc je trouve que 107 caractères pour un chemin c'est juste
    Ah, OK. Un alias ?

  13. #13
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    Les socket unix c'est comme les socket Internet, mais c'est un fichier au lieu d'une adresse IP et port. C'est très pratique pour faire des policy serveur.

    Mon programme ici est un policy serveur pour postfix qui banni les ip des spammeur avec iptable.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/08/2009, 18h30
  2. classe avec membre matrix de taille 2*2
    Par manitor dans le forum Boost
    Réponses: 11
    Dernier message: 06/06/2009, 14h04
  3. Interface, membres et implémentation..
    Par s.o.f dans le forum Framework .NET
    Réponses: 1
    Dernier message: 04/06/2008, 19h32
  4. Réponses: 14
    Dernier message: 26/10/2006, 14h44
  5. d'un tableau d'une taille d'une donnée membre
    Par picsou33 dans le forum C++
    Réponses: 8
    Dernier message: 27/02/2006, 23h18

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