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 : 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 */
     };
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 : 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);
}
Merci.