Считать следующую строку файла базы данных хостов
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
struct hostent * gethostent_r( FILE **hostf,
struct hostent *result,
char *buffer,
int buflen,
int *h_errnop );
- hostf
NULL
, или адрес указателя FILE *
, связанного с файлом базы данных хоста.
- result
- Указатель на struct hostent, где функция может хранить запись хоста.
- buffer
- Указатель на буфер, который функция может использовать во время операции для хранения записей базы данных хостов; buffer должен быть достаточно большим, чтобы вместить все данные, связанные с записью о хосте. Буфера, размером 2 КБ обычно более чем достаточно; 256-байтовый буфер в большинстве случаев безопасен.
- buflen
- Размер буфера buffer.
- h_errnop
- Указатель на область памяти, где функция может сохранить значение h_errno в случае возникновения ошибки.
libsocket
Функция gethostent_r() является потокобезопасной версией функции gethostent(). Эта функция получает запись локального хоста. Если указатель, на который указывает hostf равен NULL
, gethostent_r() открывает /etc/hosts и возвращает указатель на файл hostf для дальнейшего использования. Вызывающий процесс должен закрыть файл при помощи fclose().
| При первом вызове gethostent_r(), следует передать NULL в hostf. |
Указатель на структуру struct hostent или NULL
в случае ошибки.
В случае возникновения ошибки, int
, на которую указывает h_errnop устанавливается в:
- ERANGE
- Предоставленный buffer не может вместить результат.
- HOST_NOT_FOUND
- Ответ, полученный непосредственно от сервера, который располагает информацией об указанном домене: неизвестный хост.
- NO_ADDRESS
- Нет адреса, связанного с именем; необходимо найти запись MX.
- NO_DATA
- Допустимое имя, однако отсутствует запись данных запрошенного типа. Имя известно серверу имен, но с ним не связан IP-адрес - это не является временной ошибкой. Другой тип запроса к серверу имен с использованием этого доменного имени даст ответ (например, для этого домена может быть зарегистрирован почтовый сервер пересылки).
- NO_RECOVERY
- Неизвестная ошибка сервера. Произошел непредвиденный сбой сервера. Неисправимая сетевая ошибка.
- TRY_AGAIN
- Ответ, полученный от промежуточного сервера: Ошибка поиска имени хоста. Обычно это временная ошибка и означает, что локальный сервер не получил ответа от полномо
- /etc/hosts
- Файл, содержащий базу данных доменных имен.
Unix
- Да
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Нет
- В потоке
- Да
struct hostent, endhostent(), gethostent(), sethostent()
/etc/hosts в Справочнике по Утилитам
Предыдущий раздел: Описание API сетевой библиотеки