Scroll to navigation

gethostname(2) System Calls Manual gethostname(2)

ИМЯ

gethostname, sethostname - получить/установить имя узла

БИБЛИОТЕКА

Стандартная библиотека языка C (libc, -lc)

СИНТАКСИС

#include <unistd.h>
int gethostname(char *name, size_t len);
int sethostname(const char *name, size_t len);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

gethostname():


_XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
|| /* glibc 2.19 and earlier */ _BSD_SOURCE

sethostname():


начиная с glibc 2.21:
_DEFAULT_SOURCE
в glibc 2.19 и 2.20:
_DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
до glibc 2.19, включительно:
_BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)

ОПИСАНИЕ

Данные системные вызовы используются для получения или изменения имени узла системы. Точнее говоря, они работают с именем узла, связанным с пространством имён UTS вызывающего процесса.

Вызов sethostname() устанавливает имя узла равны значению, указанному в массиве символов name. Аргумент len определяет количество байт в name. (Таким образом, name не требует наличия завершающего байта с null.)

gethostname() возвращает имя узла с null на конце в массиве символов name длиной len байт. Если имя узла, оканчивающееся null, не помещается, то имя обрезается и ошибки не происходит (но смотрите ЗАМЕЧАНИЯ далее). В POSIX.1 сказано, что если обрезание произошло, то неясно, будет ли буфер содержать завершающий байт с null.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.

ОШИБКИ

name является неправильным адресом.
len имеет отрицательное значение или для sethostname() длина len больше, чем максимально допустимое значение.
(glibc gethostname()) len is smaller than the actual size. (Before glibc 2.1, glibc uses EINVAL for this case.)
Для работы с sethostname() у вызывающего нет мандата CAP_SYS_ADMIN в пользовательском пространстве имён, связанном с его пространством имён UTS (смотрите namespaces(7)).

СТАНДАРТЫ

SVr4, 4.4BSD (данная функция впервые появилась в 4.2BSD). В POSIX.1-2001 и POSIX.1-2008 определена gethostname(), но нет sethostname().

ПРИМЕЧАНИЯ

SUSv2 гарантирует, что «Длина имени узла ограничена 255-ю байтами». POSIX.1 гарантирует, что «Длина имени узла (не включая завершающий нулевой символ) ограничена HOST_NAME_MAX байтами». В Linux значение HOST_NAME_MAX равно 64, которое было урезано начиная с Linux 1.0 (ранние версии имели предел в 8 байт).

Отличия между библиотекой C и ядром

Библиотека GNU C library не использует системный вызов gethostname(); вместо этого gethostname() в ней реализован в виде библиотечной функции, которая вызывает uname(2) и копирует до len байт в name из возвращаемого поля nodename. Выполнив копирование, функция проверяет, что длина nodename не больше или равна len, и если это обнаруживается, то функция возвращает -1, устанавливая значение errno равным ENAMETOOLONG; в этом случае в возвращаемое значение name завершающий null не добавляется.

Versions of glibc before glibc 2.2 handle the case where the length of the nodename was greater than or equal to len differently: nothing is copied into name and the function returns -1 with errno set to ENAMETOOLONG.

СМОТРИТЕ ТАКЖЕ

hostname(1), getdomainname(2), setdomainname(2), uname(2), uts_namespaces(7)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.

5 февраля 2023 г. Справочные страницы Linux 6.03