Bonjour,
J'utilise les fonctiosn gethostname et gethostbyname afin de récupérer l'adresse IP d'une machine.
La fonction gethostbyname rempli une variable de type hostent :
Mon soucis est le suivant : est-il nécessaire d'initialiser les champs de cette structure ou non (normalement oui), sachant que l'exemple du man (solaris 5.8) ne les rempli pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 struct hostent { char *h_name; /* canonical name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; /* list of addresses */ };
Voici un exemple de test, basé sur celui du man.
Merci.
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
34
35
36
37
38
39
40
41
42 /* Necessite d'utiliser l'option -lnsl pour compiler */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> int main (void) { struct hostent *hp; /* la variable de type hostent qui pose probleme */ char **p; /* utilisé pour parcourir le tableau de resultat */ int ret; /* code de retour */ char hostname[256]; /*nom d'hote*/ ret = sethostent (1); /* initalisation des hotes */ printf ("ret sethostent = %d\n", ret); :*debug*/ ret = gethostname (hostname, 256); /* récupération du nom d'hote */ printf ("ret gethostname = %d ; hostname : %s\n", ret, hostname); /*debug*/ hp = gethostbyname (hostname); /* appel pour recuperer les adresses IP */ for (p = hp->h_addr_list; *p != 0; p++) { /*parcour du tableau de resultat, issu du man */ struct in_addr in; char **q; (void) memcpy(&in.s_addr, *p, sizeof (in.s_addr)); (void) printf("%s\t%s", inet_ntoa(in), hp->h_name); for (q = hp->h_aliases; *q != 0; q++) (void) printf(" %s", *q); (void) putchar('\n'); } endhostent(); exit (0); }
Partager