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 :

gethostname() me joue des tours..


Sujet :

C

  1. #1
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut gethostname() me joue des tours..
    Bonjour,

    Je souhaite récupérer le nom de ma machine (rien de bien compliqué..)
    Je fais donc simplement :
    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
     
    #include <unistd.h>
     
    int main()
    {
       char nomMachine[64];
       int err;
     
       err = gethostname(nomMachine,sizeof nomMachine);
       if ( err == 0 )
       {
          /*...*/
       }
       else
       {
          perror("gethostname");
       }
       return err;
    }
    Je compile...
    gcc -Wall -Wextra -Werror -O2 -ansi serveur.c -o serveur
    Et là surprise..
    cc1: warnings being treated as errors
    serveur.c: In function ‘main’:
    serveur.c:66: attention : implicit declaration of function ‘gethostname’
    Je verifie en faisant un man gethostname...
    NOM
    gethostname, sethostname - Lire / écrire le nom d’hôte.

    SYNOPSIS
    #include <unistd.h>

    int gethostname(char *nom, size_t lg);
    int sethostname(const char *nom, size_t lg);
    il suffit donc pourtant bien d'inclure unistd.h, ce que j'ai fait..
    Si quelqu'un a une idée pour contrer ce phénomène que je n'explique pas..

    Merci pour vos réponses
    Sorry

  2. #2
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Points : 62
    Points
    62
    Par défaut
    J'espère ne pas dire de bétises...
    Mais gethostname attends un char*.
    ne devrais donc tu pas l'appeler en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    err = gethostname(&nomMachine,sizeof nomMachine);

  3. #3
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    err = gethostname(&nomMachine,sizeof nomMachine);
    Meme warning du compilo'..

  4. #4
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Points : 62
    Points
    62
    Par défaut
    Et en mettant des parentheses pour le sizeof ?
    Le unistd.h est bien sur ta machine ?

  5. #5
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par jack69
    Et en mettant des parentheses pour le sizeof ?
    Les parenthèses sont facultatives
    Citation Envoyé par jack69
    Le unistd.h est bien sur ta machine ?
    Euh oui quand même..
    Sinon j'aurait eut une erreur du style "unistd.h" : no such file or directory

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Je crois avoir déjà subi ce problème, qui semble dû au fait que les headers de gcc ne définissent pas les define qu'il faut quand il faut.
    Tu peux t'en sortir provisoirement en mettant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #ifndef __USE_BSD
    #define __USE_BSD
    #endif
    #include <unistd.h>
    Ce problème doit être résolu dans les dernières versions de la libc, mais je n'en suis pas certain.

  7. #7
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    C'est good, merci

  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 jack69
    J'espère ne pas dire de bétises...
    Mais gethostname attends un char*.
    ne devrais donc tu pas l'appeler en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    err = gethostname(&nomMachine,sizeof nomMachine);
    Citation Envoyé par jack69
    Et en mettant des parentheses pour le sizeof ?
    Le unistd.h est bien sur ta machine ?
    Pff arrete de poster pour poster, ou verifie ce que tu dis avant de poster
    Si unistd n'etait pas sur sa machine le compilo lui dirait.
    &nomMachine
    Il passe l'adresse du premier element de son tableau, a la compil il aura une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(void)
    {
    ...
    return err;
    }
    main si il se termine correctement renvoi toujours 0, c'est une convention

    Tu peux utiliser sinon
    gethostbyname

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

Discussions similaires

  1. dev-c++ 4.9.9.2. joue des tours
    Par senvedgi dans le forum Débuter
    Réponses: 11
    Dernier message: 10/09/2013, 09h13
  2. Je crois que Spring me joue des tours
    Par coulane dans le forum JPA
    Réponses: 0
    Dernier message: 03/11/2011, 11h44
  3. Code des tours de hanoi
    Par crazyvirus dans le forum C++
    Réponses: 11
    Dernier message: 03/02/2009, 07h55
  4. Variante des tours de Hanoï (disques pairs, impairs)
    Par loader dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 23/09/2008, 09h29
  5. Varible public joue des tours
    Par lg022 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 15/07/2008, 16h21

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