
FAQ CConsultez toutes les FAQ
Nombre d'auteurs : 28, nombre de questions : 175, création le 11 janvier 2013
Sommaire→Les entrées/sorties→Réseau
Sous Windows, à l'aide de GetComputerNameEx et sous UNIX à l'aide de gethostname. Les programmes suivant utilisent ces fonctions pour
afficher le nom de la machine locale.
Windows :
#define _WIN32_WINNT 0x0500 /* GetComputerNameEx n'existe que depuis Windows 2000 (Windows NT 5.0 *) */
#include <stdio.h>
#include <windows.h>
int main(void)
{
char lpBuffer[256];
DWORD dwBufLength = sizeof(lpBuffer);
/* ComputerNameDnsFullyQualified indique qu'on veut le nom complet de la machine (HostName.DomainName). */
if (GetComputerNameEx(ComputerNameDnsFullyQualified, lpBuffer, &dwBufLength))
printf("%s\n", lpBuffer);
else
fprintf(stderr, "La fonction GetComputerNameEx a echoue.\n");
return 0;
}
UNIX :
#include <stdio.h>
#include <unistd.h>
int main(void)
{
char hostname[256];
if (gethostname(hostname, sizeof(hostname)) == 0)
printf("%s\n", hostname);
else
fprintf(stderr, "La fonction gethostname a echoue.\n");
return 0;
}
A noter que la fonction gethostname existe aussi sous Windows mais fait partie de l'API WinSock donc son utilisation nécessite
toutes les initialisations préalables requises par cette API.
La conversion nom de machine vers adresse IP peut se faire grâce à la fonction gethostbyname(). Cette fonction prend en paramètre le nom de la machine et fournit en retour une structure contenant, entre autres, les différentes adresses de la machine. La fonction suivante affiche les adresses IP d'une machine dont le nom est fourni en paramètre.
void PrintIp(const char * HostName)
{
struct hostent * host;
struct in_addr addr;
if ((host = gethostbyname(HostName)) != NULL)
{
int i;
for(i = 0; host->h_addr_list[i] != NULL; i++)
{
memcpy(&addr.s_addr, host->h_addr_list[i], sizeof(addr.s_addr));
printf("IP : %s\n", inet_ntoa(addr));
}
}
else
printf("La fonction gethostbyname a echoue.\n");
}
Il convient bien entendu d'inclure les fichiers d'en-tête correspondants (netdb.h sous UNIX, winsock2.h sous Windows) et de lier avec les bibliothèques nécessaires.



