[c] Problème gethostname

Fermé
Flo - 7 févr. 2006 à 20:05
 assassin - 25 févr. 2010 à 18:31
Bonsoir ! Je débute en C (autant dire que j'ai encore de sérieuses lacunes, mais que je m'accroche tant bien que mal), et je rencontre un problème avc ce code, trouvé sur le net.

#include <stdio.h>
#include <unistd.h> /* pour gethostname */

#define max_nom 32
int main()
{
  char nom[max_nom];
  gethostname(nom, max_nom);
  printf("Ma machine s'appelle %s\n",nom);
  return 0;
}


Je le compile sous Dev C++ et j'obtiens l'erreur suivante : "implicit declaration of function `int gethostname(...)'"

J'ai donc fait des recherches sur la fonction gethostname, mais je vois pas d'ou vient l'erreur.
Si qqn pouvait donc m'éclaircir, ou me filer un bout de code qui fonctionne permettant d'obtenir le nom de la machine, ça serait bien sympa :)

Merci d'avance, bonne soirée

Flo

11 réponses

carkiasis Messages postés 67 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 avril 2007 28
7 févr. 2006 à 20:21
Le probleme peut se trouver dans les parametres de cette fonction, normalement elle doit etre definie comme ceci :

gethostname(char *name, size_t namelen);

L'erreur se trouve (peut etre...)au niveau des types des variables que tu passes en parametres.
Sachant qu'un char [n] (comme tu as fait) et char*, ce n'est pas exactement la meme chose. C'est peut etre ca le probleme.

1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
7 févr. 2006 à 20:25
Je viens de tester sur un fedora 4 avec gcc 4.0.0 et pas des problèmes.
1
Merci pour vos réponses !

Carkiasis > merci, j'ai essayé de bidouiller un peu, mais bon pignoufe comme je suis j'arrive bien évidemment a rien.

Mes expérimentations en sont là :

#include <stdio.h>
#include <unistd.h>

int main()
{

char *name;
int gethostname(char *name, size_t namelen);
  printf("Ma machine s'appelle %s\n",*name);
  return 0;
}


Ca compile, mais quand j'exécute y se passe rien :)

lami20j > hé hé, c'est bon signe que ça marche sous fedora, mais je suis sous win :(

Merci
1
carkiasis Messages postés 67 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 avril 2007 28
7 févr. 2006 à 20:43


J'ai essayé mais il ne veut pas compiler, bizarre.
je te mets quand meme ce que j'ai essayé :

#include <stdio.h>
#include <unistd.h>
int main()
{

    char *name;
    size_t taille;


  gethostname(name, taille);
  
  printf("Ma machine s'appelle %s\n",name);
  
  return 0;
}
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
9 févr. 2006 à 18:16
bonjour

j'ai bien un code que je compile avec devc++ mais il me faut utiliser winsock2.h pour utiliser gethostname. et puis en plus ca me donne pas le nom de ma machine lol. mais si tu le veux je te le donne.

a +
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Personne aurait un code à me proposer svp ?
Merci bien :)
0
agnesN7 Messages postés 12 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2006 2
10 févr. 2006 à 09:45
Flo : au sujet du 3e message : quand "il se passe rien", tu as pas une fenêtre dos qui s'affiche fugitivement? Dans ce cas c'est tout à fait compréhensible. Ton code est (il me semble) correct. Seulement tu demandes à ton processeur de t'afficher le nom de ta machine puis de fermer le programme tout de suite, c'est à dire (dans le cas le plus lent) quelques ms après l'affichage. Autant dire que même avec des yeux de lynx, tu auras du mal à voir le résultat! Ce que tu dois faire, c'est lui demander d'attendre une action de ta part avant de fermer la fenêtre. Par exemple, en ajoutant getchar() (je te cite ça "de tête", donc vérifie si ça marche pas) à la fin de ton programme, il attendra que tu appuies sur entrée pour fermer la fenêtre, et tu auras le temps de lire :-)
0
carkiasis Messages postés 67 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 avril 2007 28
10 févr. 2006 à 13:01
Pour faire une pause simple en C, il faut utiliser l'instruction system("pause");

Il me semble qu'elle est definie dans le header "stdlib.h", à inclure donc.
0
Merci pour vos réponses :]

tu as pas une fenêtre dos qui s'affiche fugitivement? --> Si si, elle s'affiche et reste ouverte, mais rien n'apparait

J'ai tenté en mettant une pause, mais le résultat est le même, la fenetre s'ouvre, reste a l'écran, mais reste noire :(

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{

char *name;
int gethostname(char *name, size_t namelen);
  printf("Ma machine s'appelle %s\n",*name);
 system("pause");
return 0;

}


Je commence a désespérer !
0
il faut que tu définisse le taille.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#define TAILLE_NOM 20;

int main()
{

char *name;
int gethostname(name, TAILLE_NOM);
printf("Ma machine s'appelle %s\n",name);
return 0;
}
G pas test le code mais je pense que c bon.
0
assassin > assassin
25 févr. 2010 à 00:33
désole je n'ai pas bien regardé mon code.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netdb.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>

#define TAILLE_NOM 20

int main()
{
int r;
char *name;
if ((name = (char *) malloc(TAILLE_NOM)) == NULL) {
perror("probleme avec le malloc");
exit(1);
}
if ((r = gethostname(name,(size_t) TAILLE_NOM)) == -1) {
perror("probleme avec gethostname");
exit(1);
}

printf("Ma machine s'appelle %s\n", name);
return 0;
}


la g test le code et c bon voi pour les bibliotheque il y en a trop a toi de faire le tri.(j'avai une erreur que etait du a un mauvai usage de la commande gcc et je croye que c'etait les biblio)
0
carkiasis Messages postés 67 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 avril 2007 28
10 févr. 2006 à 14:15
Pour moi, ces deux lignes ne sont pas correctes

int gethostname(char *name, size_t namelen);
  printf("Ma machine s'appelle %s\n",*name);


Pour la premiere ligne, ce que tu ecrit c'est une declaration de fonction et non pas l'appel à la fonction en elle meme (dites moi si je me trompe...)
Un truc plus correct serai ce que j'ai mis quelques post avant, meme s'il me mets une erreur de compilation, c'est en tout cas plus proche de la vérité.

Pour la deuxieme c'est
printf("Ma machine s'appelle %s\n",name); 

et non pas *name.

J'ai beau avoir pas mal d'experience en C, ce gethostname est bien bizarre... Un pro à la rescousse ??
0
agnesN7 Messages postés 12 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2006 2
10 févr. 2006 à 18:48
int gethostname(char *name, size_t namelen); -> je suis d'accord avec carkiasis
0
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netdb.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>

#define TAILLE_NOM 20

int main()
{
int r;
char *name;
if ((name = (char *) malloc(TAILLE_NOM)) == NULL) {
perror("probleme avec le malloc");
exit(1);
}
if ((r = gethostname(name,(size_t) TAILLE_NOM)) == -1) {
perror("probleme avec gethostname");
exit(1);
}

printf("Ma machine s'appelle %s\n", name);
return 0;
}
0