[structure] Initialisation nécessaire ?
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 :
Code:
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 */
}; |
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 ?
Voici un exemple de test, basé sur celui du man.
Code:
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);
} |
Merci.