Для конструирования адреса Internet по имени машины,можно ис- пользовать функцию gethostbyname (). #include <netdb.h>
struct hostent *gethostbyname (hostname) char *hostname
Функция возвращает указатель структуры hostent:
struct hostent {
char *h_name; /*имя машины*/
char **h_aliases; /*список псевдоимен*/
int h_addrtype; /*AF_INET*/
int h_length; /*4 байта*/
char **h_addr_list;
/*список адресов Internet*/
};
Эта функция находит адрес в файле /etc/hosts, или же использует сервисные программы сервера имен. Сервером имен является демон (следящая программа) UNIX, который обладает или может найти имя и адрес всех машин сети. Наиболее распространенными серверами имен являются NIS (Network Information Service), который ранее назывался YP (Yellow Pages) и BIND (Berkeley Internet Name Service), иначе называемый DNS (Domain Name Service).
ПРОГРАММА 23 /* программа, выдающая на экран адреса Internet, соответст-
вующие именам машин, указанных в качестве параметра */ #include "soct.h" #include <arpa/inet.h>
main(argc, argv) int argc; char **argv; { struct hostent *hostp; /* структура адреса */ long int i; /* счетчик цикла */
/* цикл по аргументам = именам машин */ for (i = 1; i<argc; i++) { if ( (hostp = (structhostent *) gethostbyname(argv[i])) == NULL) printf("**host %s non trouve**\n", argv[i]); else { /* считается, что у машины только один адрес Internet */ printf("host %s adresse : %s \n", hostp->h_name, inet_ntoa(*hostp->h_addr_list)); } } }
Одна из функций позволяет найти имя машины по ее адресу Internet: gethostbyaddr (). Наконец, один из примитивов позволяет найти номер порта сервисной программы, определенной в файле /etc/services: getservbyname ().
#include <netdb.h>
struct servent *getservbyname (servname, protoname) char *servname; /*имя услуги*/
char *protoname; /*TCP или UDP*/
Функция возвращает указатель на структуру servent:
struct servent {
char *s_name; /*имя услуги*/
char **s_aliases; /*список псевдоимен*/
int s_port; /*номер порта*/
char *s_proto; /*используемый протокол*/
};
ПРОГРАММА 24 /* программа, выдающая на экран номера портов, соответствующих именам служб, указанных в качестве параметра */ #include "soct.h" #include <arpa/inet.h>