Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
getifaddrs, freeifaddrs - Renvoyer les adresses des interfaces
SYNOPSIS
#include <sys/types.h>
#include <ifaddrs.h>
int getifaddrs(struct ifaddrs **ifap);
void freeifaddrs(struct ifaddrs *ifa);
DESCRIPTION
La fonction getifaddrs() cree une liste chainee de structures decrivant
les interfaces reseau du systeme local et sauvegarde l'adresse du
premier element de la liste dans *ifap. La liste est constituee de
stucture ifaddrs definie ci-dessous :
struct ifaddrs {
struct ifaddrs *ifa_next; /* Next item in list */
char *ifa_name; /* Name of interface */
unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */
struct sockaddr *ifa_addr; /* Address of interface */
struct sockaddr *ifa_netmask; /* Netmask of interface */
union {
struct sockaddr *ifu_broadaddr;
/* Broadcast address of interface */
struct sockaddr *ifu_dstaddr;
/* Point-to-point destination address */
} ifa_ifu;
#define ifa_broadaddr ifa_ifu.ifu_broadaddr
#define ifa_dstaddr ifa_ifu.ifu_dstaddr
void *ifa_data; /* Address-specific data */
};
Le champ ifa_next contient un pointeur vers la prochaine structure de
la liste ou NULL si c'est le dernier de la liste.
ifa_name pointe vers un nom d'interface termine par un caractere nul.
Le champ ifa_flags contient les drapeaux de l'interface, comme renvoye
par l'operation ioctl(2) SIOCGUFFLAGS (consultez netdevice(7) pour la
liste des drapeaux).
Le champ ifa_addr pointe vers une structure contenant l'adresse de
l'interface (le sous-champ sa_family devrait etre consulte afin de
determiner le format de la structure d'adresse).
Le champ ifa_netmask pointe vers une structure contenant le masque
reseau associe a ifa_addr, si cela est valable pour cette famille
d'adresse.
Selon que le bit IFF_BROADCAST ou IFF_POINTOPOINT est defini dans
ifa_flags (seul l'un des deux bit peut etre defini), soit ifa_broadaddr
contiendra l'adresse de diffusion associee a ifa_addr (si cela est
applicable avec cette famille d'adresse), ou soit ifa_dstaddr
contiendra l'adresse de destination de l'interface point a point.
Le champ ifa_data pointe vers un tampon contenant les donnees
specifique de la famille d'adresse (<< address-family-specific
data >>). Ce champ peut etre NULL s'il n'y a aucune donnee de ce type
pour cette interface.
La donnee renvoyee par getifaddrs() est dynamiquement allouee et
devrait etre liberee avec freeifaddrs().
VALEURS RENVOY'EES
En cas de reussite, getifaddrs() renvoie 0, en cas d'erreur, elle
renvoie -1 et errno est rempli avec le code d'erreur.
ERREURS
getifaddrs() peut echouer et definir errno pour toutes erreurs
specifiees pour socket(2), bind(2), getsockname(2), recvmsg(2),
sendto(2), malloc(3) ou realloc(3).
VERSIONS
getifaddrs() est apparue dans la glibc 2.3. Les versions anterieures a
la glibc 2.3.3 n'implementaient que l'IPv4. La gestion de l'IPv6 a ete
ajoutee dans la glibc 2.3.3. La gestion des familles d'adresse autre
que IPv4 n'est disponible que si le noyau gere netlink.
CONFORMIT'E
Pas dans POSIX.1-2001. Cette fonction est apparue en premier dans BSDi
et elle est presente sur les systemes BSD avec de legeres differences
semantiques documentees ; elle renvoie une entree par interface et non
pas par adresse. Cela signifie que ifa_addr et d'autres champs peuvent
etre NULL si l'interface n'a pas d'adresse, et aucune adresse
<< link-level >> (synonyme d'adresse MAC) n'est renvoyee si l'interface
possede une adresse IP. De plus, la facon de choisir soit ifa_broadaddr
ou soit ifa_dstaddr varie sur beacoup de systemes.
NOTES
Les adresses renvoyees sous Linux seront generalement les adresses IPv4
et IPv6 de l'interface, et une adresse AF_PACKET contenant des details
bas niveau de l'interface et de sa couche physique. Dans ce cas, le
champ ifa_data peut contenir un pointeur vers une structure
net_device_stats, definie dans <linux/netdevice.h>, qui contient
differents attributs et statistiques sur les interfaces.
EXEMPLE
Le programme suivant decrit l'utilisation de getifaddrs(),
freeifaddrs() et getnameinfo(3). Ci-dessous, la sortie du programme sur
un systeme :
$ ./a.out
lo address family: 17 (AF_PACKET)
eth0 address family: 17 (AF_PACKET)
lo address family: 2 (AF_INET)
address: <127.0.0.1>
eth0 address family: 2 (AF_INET)
address: <10.1.1.4>
lo address family: 10 (AF_INET6)
address: <::1>
eth0 address family: 10 (AF_INET6)
address: <fe80::2d0:59ff:feda:eb51%eth0>
Source du programme
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
#include <ifaddrs.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
struct ifaddrs *ifaddr, *ifa;
int family, s;
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) == -1) {
perror("getifaddrs");
exit(EXIT_FAILURE);
}
/* Walk through linked list, maintaining head pointer so we
can free list later */
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
family = ifa->ifa_addr->sa_family;
/* Display interface name and family (including symbolic
form of the latter for the common families) */
printf("%s address family: %d%s\n",
ifa->ifa_name, family,
(family == AF_PACKET) ? " (AF_PACKET)" :
(family == AF_INET) ? " (AF_INET)" :
(family == AF_INET6) ? " (AF_INET6)" : "");
/* For an AF_INET* interface address, display the address */
if (family == AF_INET || family == AF_INET6) {
s = getnameinfo(ifa->ifa_addr,
(family == AF_INET) ? sizeof(struct sockaddr_in) :
sizeof(struct sockaddr_in6),
host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
if (s != 0) {
printf("getnameinfo() failed: %s\n", gai_strerror(s));
exit(EXIT_FAILURE);
}
printf("\taddress: <%s>\n", host);
}
}
freeifaddrs(ifaddr);
exit(EXIT_SUCCESS);
}
VOIR AUSSI
bind(2), getsockname(2), socket(2), packet(7), ifconfig(8)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Florentin Duneau et l'equipe francophone de traduction de
Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.