.\" -*- coding: UTF-8 -*- .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" Modified 1993-05-22, David Metcalfe .\" Modified 1993-07-25, Rik Faith (faith@cs.unc.edu) .\" Modified 1997-02-16, Andries Brouwer (aeb@cwi.nl) .\" Modified 1998-12-21, Andries Brouwer (aeb@cwi.nl) .\" Modified 2000-08-12, Andries Brouwer (aeb@cwi.nl) .\" Modified 2001-05-19, Andries Brouwer (aeb@cwi.nl) .\" Modified 2002-08-05, Michael Kerrisk .\" Modified 2004-10-31, Andries Brouwer .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH GETHOSTBYNAME 3 "21 декабря 2020 г." "" "Руководство программиста Linux" .SH ИМЯ gethostbyname, gethostbyaddr, sethostent, gethostent, endhostent, h_errno, herror, hstrerror, gethostbyaddr_r, gethostbyname2, gethostbyname2_r, gethostbyname_r, gethostent_r \- получение записи о сетевом узле .SH СИНТАКСИС .nf \fB#include \fP \fBextern int h_errno;\fP .PP \fBstruct hostent *gethostbyname(const char *\fP\fIname\fP\fB);\fP \fB#include \fP /* для AF_INET */ \fBstruct hostent *gethostbyaddr(const void *\fP\fIaddr\fP\fB,\fP \fB socklen_t \fP\fIlen\fP\fB, int \fP\fItype\fP\fB);\fP .PP \fBvoid sethostent(int \fP\fIstayopen\fP\fB);\fP .PP \fBvoid endhostent(void);\fP .PP \fBvoid herror(const char *\fP\fIs\fP\fB);\fP .PP \fBconst char *hstrerror(int \fP\fIerr\fP\fB);\fP .PP /* расширение System V/POSIX */ \fBstruct hostent *gethostent(void);\fP .PP /* расширения GNU */ \fBstruct hostent *gethostbyname2(const char *\fP\fIname\fP\fB, int \fP\fIaf\fP\fB);\fP .PP \fBint gethostent_r(\fP \fB struct hostent *\fP\fIret\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbuflen\fP\fB,\fP \fB struct hostent **\fP\fIresult\fP\fB, int *\fP\fIh_errnop\fP\fB);\fP .PP \fBint gethostbyaddr_r(const void *\fP\fIaddr\fP\fB, socklen_t \fP\fIlen\fP\fB, int \fP\fItype\fP\fB,\fP \fB struct hostent *\fP\fIret\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbuflen\fP\fB,\fP \fB struct hostent **\fP\fIresult\fP\fB, int *\fP\fIh_errnop\fP\fB);\fP .PP \fBint gethostbyname_r(const char *\fP\fIname\fP\fB,\fP \fB struct hostent *\fP\fIret\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbuflen\fP\fB,\fP \fB struct hostent **\fP\fIresult\fP\fB, int *\fP\fIh_errnop\fP\fB);\fP .PP \fBint gethostbyname2_r(const char *\fP\fIname\fP\fB, int \fP\fIaf,\fP \fB struct hostent *\fP\fIret\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbuflen\fP\fB,\fP \fB struct hostent **\fP\fIresult\fP\fB, int *\fP\fIh_errnop\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP .PD 0 .ad l \fBgethostbyname2\fP(), \fBgethostent_r\fP(), \fBgethostbyaddr_r\fP(), \fBgethostbyname_r\fP(), \fBgethostbyname2_r\fP(): .RS 4 .TP 4 Начиная с glibc 2.19: _DEFAULT_SOURCE .TP 4 Версии glibc по 2.19 включительно: _BSD_SOURCE || _SVID_SOURCE .RE .PD .PP .PD 0 \fBherror\fP(), \fBhstrerror\fP(): .RS 4 .TP 4 Начиная с glibc 2.19: _DEFAULT_SOURCE .TP 4 Версии glibc с 2.8 по 2.19: _BSD_SOURCE || _SVID_SOURCE .TP До glibc 2.8: ни одного .RE .PD .PP .PD 0 \fBh_errno\fP: .RS 4 .TP 4 Начиная с glibc 2.19 _DEFAULT_SOURCE || _POSIX_C_SOURCE < 200809L .TP 4 Версии glibc с 2.12 по 2.19: _BSD_SOURCE || _SVID_SOURCE || _POSIX_C_SOURCE < 200809L .TP До glibc 2.12: ни одного .RE .ad b .PD .SH ОПИСАНИЕ Функции \fBgethostbyname*\fP(), \fBgethostbyaddr*\fP(), \fBherror\fP() и \fBhstrerror\fP() являются устаревшими. Вместо них в приложениях следует использовать \fBgetaddrinfo\fP(3), \fBgetnameinfo\fP(3) и \fBgai_strerror\fP(3). .PP Функция \fBgethostbyname\fP() возвращает структуру типа \fIhostent\fP для узла \fIname\fP. Значением \fIname\fP может быть или имя узла, или адрес IPv4 в стандартной точечной записи (как в \fBinet_addr\fP(3)). Если \fIname\fP — адрес IPv4, то поиск не выполняется и \fBgethostbyname\fP() просто копирует \fIname\fP в поле \fIh_name\fP, а его эквивалент \fIstruct in_addr\fP — в поле \fIh_addr_list[0]\fP возвращаемой структуры \fIhostent\fP Если \fIname\fP не оканчивается точкой и установлена переменная окружения \fBHOSTALIASES\fP, то \fIname\fP сначала ищется в файле псевдонимов, указанном в \fBHOSTALIASES\fP (формат файла описан в \fBhostname\fP(7)). Если \fIname\fP не оканчивается точкой, то поиск производится с текущем доменом и его предками. .PP Функция \fBgethostbyaddr\fP() возвращает структуру типа \fIhostent\fP для адреса узла \fIaddr\fP длинной \fIlen\fP и типом адреса \fItype\fP. Допустимые типы адресов — \fBAF_INET\fP и \fBAF_INET6\fP. Аргумент адреса узла — указатель на структуру с типом, зависящим от типа адреса, например для типа адреса \fBAF_INET\fP используется \fIstruct in_addr *\fP (возможно, полученная из вызова \fBinet_addr\fP(3)). .PP Функция \fBsethostent\fP() задаёт (при \fIstayopen\fP равным истине (1)), что для опроса сервера имён должен использоваться подключённый сокет TCP и что соединение должно остаться открытым для последующих запросов. В противном случае для опроса сервера имён будут использоваться дейтаграммы UDP. .PP Функция \fBendhostent\fP() закрывает использованное для опросов сервера имён соединение TCP. .PP Функция \fBherror\fP() (устарела) печатает в \fIstderr\fP сообщение об ошибке в соответствии с текущим значением \fIh_errno\fP. .PP Функция \fBhstrerror\fP() (устарела) принимает номер ошибки (обычно, \fIh_errno\fP) и возвращает соответствующую строку с сообщением об ошибке. .PP .\" The domain name queries carried out by \fBgethostbyname\fP() and \fBgethostbyaddr\fP() rely on the Name Service Switch (\fBnsswitch.conf\fP(5)) configured sources or a local name server (\fBnamed\fP(8)). The default action is to query the Name Service Switch (\fBnsswitch.conf\fP(5)) configured sources, failing that, a local name server (\fBnamed\fP(8)). .SS "Историческая справка" Современным способом управления порядком поиска узлов является файл \fBnsswitch.conf\fP(5). .PP В glibc 2.4 и старее, ключевое слово \fIorder\fP использовалось для управления порядком поиска узла в \fI/etc/host.conf\fP (\fBhost.conf\fP(5)). .PP Структура \fIhostent\fP определена в \fI\fP таким образом: .PP .in +4n .EX struct hostent { char *h_name; /* официальное имя узла */ char **h_aliases; /* список псевдонимов */ int h_addrtype; /* тип адреса узла */ int h_length; /* длина адреса */ char **h_addr_list; /* список адресов */ } #define h_addr h_addr_list[0] /* для обратной совместимости */ .EE .in .PP Члены структуры \fIhostent\fP: .TP \fIh_name\fP Официальное имя узла. .TP \fIh_aliases\fP Массив альтернативных имён узла, заканчивается указателем null. .TP \fIh_addrtype\fP Тип адреса; \fBAF_INET\fP или \fBAF_INET6\fP. .TP \fIh_length\fP Длина адреса в байтах. .TP \fIh_addr_list\fP Массив указателей сетевых адресов узла (в сетевом порядке байт), заканчивается указателем null. .TP \fIh_addr\fP Первый адрес из \fIh_addr_list\fP, для обратной совместимости. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Функции \fBgethostbyname\fP() и \fBgethostbyaddr\fP() возвращают структуру \fIhostent\fP или указатель null при ошибке. При ошибке переменная \fIh_errno\fP содержит номер ошибки. Если получен не NULL, то возвращаемое значение может указывать на статические данные, смотрите замечание далее. .SH ОШИБКИ Переменная \fIh_errno\fP может содержать следующие значения: .TP \fBHOST_NOT_FOUND\fP Заданный узел неизвестен. .TP \fBNO_DATA\fP Запрашиваемое имя корректно, но не имеет IP\-адреса. При другом типе запроса для этого домена сервер имён может вернуть ответ. Синонимом \fBNO_DATA\fP является константа \fBNO_ADDRESS\fP. .TP \fBNO_RECOVERY\fP Произошла неисправимая ошибка сервера имён. .TP \fBTRY_AGAIN\fP Произошла временная ошибка у авторитативного сервера имён. Попробуйте позже. .SH ФАЙЛЫ .TP \fI/etc/host.conf\fP файл с настройками резолвера .TP \fI/etc/hosts\fP файл базы данных узлов .TP \fI/etc/nsswitch.conf\fP настройки диспетчера службы имён .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbw18 lb lbw29 l l l. Интерфейс Атрибут Значение T{ \fBgethostbyname\fP() T} Безвредность в нитях T{ MT\-Unsafe race:hostbyname env .br locale T} T{ \fBgethostbyaddr\fP() T} Безвредность в нитях T{ MT\-Unsafe race:hostbyaddr env .br locale T} T{ \fBsethostent\fP(), .br \fBendhostent\fP(), .br \fBgethostent_r\fP() T} Безвредность в нитях T{ MT\-Unsafe race:hostent env .br locale T} T{ \fBherror\fP(), .br \fBhstrerror\fP() T} Безвредность в нитях MT\-Safe T{ \fBgethostent\fP() T} Безвредность в нитях T{ MT\-Unsafe race:hostent .br race:hostentbuf env locale T} T{ \fBgethostbyname2\fP() T} Безвредность в нитях T{ MT\-Unsafe race:hostbyname2 .br env locale T} T{ \fBgethostbyaddr_r\fP(), \fBgethostbyname_r\fP(), \fBgethostbyname2_r\fP() T} Безвредность в нитях MT\-Safe env locale .TE .sp 1 В приведённой выше таблице \fIhostent\fP в \fIrace:hostent\fP означает, что если в нескольких нитях программы одновременно используются функции \fBsethostent\fP(), \fBgethostent\fP(), \fBgethostent_r\fP() или \fBendhostent\fP(), то может возникнуть состязательность по данным. .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" В POSIX.1\-2001 определены \fBgethostbyname\fP(), \fBgethostbyaddr\fP(), \fBsethostent\fP(), \fBendhostent\fP(), \fBgethostent\fP() и \fIh_errno\fP; функции \fBgethostbyname\fP(), \fBgethostbyaddr\fP() и \fIh_errno\fP помечены как устаревшие. В POSIX.1\-2008 удалены определения \fBgethostbyname\fP(), \fBgethostbyaddr\fP() и \fIh_errno\fP; вместо них рекомендуется использовать \fBgetaddrinfo\fP(3) и \fBgetnameinfo\fP(3). .SH ЗАМЕЧАНИЯ Функции \fBgethostbyname\fP() и \fBgethostbyaddr\fP() могут возвращать указатели на статические данные, которые могут быть перезаписаны при последующих вызовах. Копирования \fIstruct hostent\fP недостаточно, так как она содержит указатели; требуется глубокое копирование. .PP В первой реализации BSD аргумент \fIlen\fP у \fBgethostbyname\fP() имел тип \fIint\fP. Стандарт SUSv2 содержит ошибку и объявляет аргумент \fIlen\fP у \fBgethostbyaddr\fP() с типом \fIsize_t\fP (это неправильно, так как он должен быть \fIint\fP, а не \fIsize_t\fP. В POSIX.1\-2001 указанный тип — \fIsocklen_t\fP, который подходит). Смотрите также \fBaccept\fP(2). .PP У прототипа BSD \fBgethostbyaddr\fP() первый аргумент имеет тип \fIconst char\ *\fP. .SS "Расширение System V/POSIX" .\" e.g., Linux, FreeBSD, UnixWare, HP-UX .\" e.g., FreeBSD, AIX В POSIX требуется вызов \fBgethostent\fP(), который должен возвращать следующий элемент из базы данных узлов. При использовании DNS/BIND это не имеет смысла, но допустимо, если база данных узлов — файл, который можно читать строку за строкой. На многих системах процедура с таким именем выполняет чтение из файла \fI/etc/hosts\fP. Она может быть доступна только когда библиотека собрана без поддержки DNS. Версия glibc игнорирует записи ipv6. Эта функция не реентерабельна; в glibc добавлена реентерабельная версия \fBgethostent_r\fP(). .SS "Расширения GNU" В glibc2 также имеется \fBgethostbyname2\fP(), работающая подобно \fBgethostbyname\fP(), но позволяющая задать адресное семейство, которому должен принадлежать адрес. .PP Glibc2 also has reentrant versions \fBgethostent_r\fP(), \fBgethostbyaddr_r\fP(), \fBgethostbyname_r\fP(), and \fBgethostbyname2_r\fP(). The caller supplies a \fIhostent\fP structure \fIret\fP which will be filled in on success, and a temporary work buffer \fIbuf\fP of size \fIbuflen\fP. After the call, \fIresult\fP will point to the result on success. In case of an error or if no entry is found \fIresult\fP will be NULL. The functions return 0 on success and a nonzero error number on failure. In addition to the errors returned by the nonreentrant versions of these functions, if \fIbuf\fP is too small, the functions will return \fBERANGE\fP, and the call should be retried with a larger buffer. The global variable \fIh_errno\fP is not modified, but the address of a variable in which to store error numbers is passed in \fIh_errnop\fP. .SH ДЕФЕКТЫ .\" http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=482973 Функция \fBgethostbyname\fP() не работает с частями строки адреса IPv4 в точечном формате, если они записаны шестнадцатеричными числами. .SH "СМ. ТАКЖЕ" .\" .BR getipnodebyaddr (3), .\" .BR getipnodebyname (3), .\" .BR resolv+ (8) \fBgetaddrinfo\fP(3), \fBgetnameinfo\fP(3), \fBinet\fP(3), \fBinet_ntop\fP(3), \fBinet_pton\fP(3), \fBresolver\fP(3), \fBhosts\fP(5), \fBnsswitch.conf\fP(5), \fBhostname\fP(7), \fBnamed\fP(8) .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitry Bolkhovskikh , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .