.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2014 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH inet_net_pton 3 "3 мая 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ inet_net_pton, inet_net_ntop \- преобразует\ номер сети Интернета .SH LIBRARY Resolver library (\fIlibresolv\fP, \fI\-lresolv\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint inet_net_pton(int \fP\fIaf\fP\fB, const char *\fP\fIpres\fP\fB,\fP \fB void \fP\fInetp\fP\fB[.\fP\fInsize\fP\fB], size_t \fP\fInsize\fP\fB);\fP \fBchar *inet_net_ntop(int \fP\fIaf\fP\fB,\fP \fB const void \fP\fInetp\fP\fB[(.\fP\fIbits\fP\fB \- CHAR_BIT + 1) / CHAR_BIT],\fP \fB int \fP\fIbits\fP\fB,\fP \fB char \fP\fIpres\fP\fB[.\fP\fIpsize\fP\fB], size_t \fP\fIpsize\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP \fBinet_net_pton\fP(), \fBinet_net_ntop\fP(): .nf Since glibc 2.20: _DEFAULT_SOURCE Before glibc 2.20: _BSD_SOURCE || _SVID_SOURCE .fi .SH ОПИСАНИЕ Эти функции преобразуют номера сетей, представленных в сетевом формате (т. е. двоичном), в представленческий формат (т. е., печатаемый) и обратно. .PP В обоих функциях в \fIaf\fP задаётся адресное семейство для преобразования; поддерживается только значение \fBAF_INET\fP. .SS inet_net_pton() The \fBinet_net_pton\fP() function converts \fIpres\fP, a null\-terminated string containing an Internet network number in presentation format to network format. The result of the conversion, which is in network byte order, is placed in the buffer pointed to by \fInetp\fP. (The \fInetp\fP argument typically points to an \fIin_addr\fP structure.) The \fInsize\fP argument specifies the number of bytes available in \fInetp\fP. .PP При успешном выполнении \fBinet_net_pton\fP() возвращает количество бит в поле номера сети результата, помещённого в \fInetp\fP. Обсуждение входного представленческого формата и возвращаемое значение смотрите в ЗАМЕЧАНИЯХ. .PP \fIЗамечание\fP: буфер, указанный в \fInetp\fP, должен быть заполнен нулями до вызова \fBinet_net_pton\fP(), так как вызов изменяет только байты, необходимые для номера сети (или сколько явно указано в \fIpres\fP), что может быть меньше, чем байт в полном адресе сети. .SS inet_net_ntop() Функция \fBinet_net_ntop\fP() преобразует номер сети в буфере, указанном в \fInetp\fP, в представленческий формат; значение \fI*netp\fP рассматривается в сетевом порядке байт. В аргументе \fIbits\fP задаётся количество бит в номере сети из \fI*netp\fP. .PP Строка в представленческом формате с null в конце помещается в буфер, на который указывает \fIpres\fP. В аргументе \fIpsize\fP задаётся количество байт, доступных в \fIpres\fP. Представленческая строка имеет формат CIDR: адрес сети в виде чисел, разделённых точками, затем косая черта и размер сети в битах. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, \fBinet_net_pton\fP() returns the number of bits in the network number. On error, it returns \-1, and \fIerrno\fP is set to indicate the error. .PP On success, \fBinet_net_ntop\fP() returns \fIpres\fP. On error, it returns NULL, and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ .TP \fBEAFNOSUPPORT\fP В \fIaf\fP указано значение, отличное от \fBAF_INET\fP. .TP \fBEMSGSIZE\fP Размер буфера результата недостаточен. .TP \fBENOENT\fP (\fBinet_net_pton\fP()) Значение \fIpres\fP имеет некорректный представленческий формат. .SH СТАНДАРТЫ None. .SH ЗАМЕЧАНИЯ .SS "Представленческий формат входных данных inet_net_pton()" Номер сети может задаваться в виде шестнадцатеричного значения или в точечно\-десятичной форме. .PP .\" If the hexadecimal string is short, the remaining nibbles are zeroed. Шестнадцатеричное значение определяется по начальному «0x» или «0X». Шестнадцатеричные цифры заполняют полубайты (половина октета) номера сети слева направо в сетевом порядке байт. .PP В точечно\-десятичной форме указываются, максимум, первые четыре октета, с помощью десятичных чисел и точек. То есть можно использовать следующие форматы: .PP .in +4n .EX a.b.c.d a.b.c a.b a .EE .in .PP .\" Reading other man pages, some other implementations treat .\" 'c' in a.b.c as a 16-bit number that populates right-most two bytes .\" 'b' in a.b as a 24-bit number that populates right-most three bytes Каждая часть — это число от 0 до 255, которое заполняет один байт получаемого номера сети; заполнение производится слева направо, в сетевом порядке байт (от старшего к младшему). Если часть пропущена, то байт результата в номере сети равно нулю. .PP В шестнадцатеричном или точечно\-десятичном формате номер сети может содержать косую черту и число от 0 до 32, которое задаёт размер сети в битах. .SS "Возвращаемое значение inet_net_pton()" Возвращаемым значением \fBinet_net_pton\fP() является количество бит поля номера сети. Если входная строка представленческих данных заканчивается косой чертой и явным значением размера, то это значение является результатом \fBinet_net_pton\fP(). В противном случае возвращаемое значение, \fIbits\fP, определяется следующим образом: .IP \[bu] 3 Если наиболее значимый байт номер сети больше или равен 240, то \fIbits\fP равно 32. .IP \[bu] Или же, если наиболее значимый байт номер сети больше или равен 224, то \fIbits\fP равно 4. .IP \[bu] Или же, если наиболее значимый байт номер сети больше или равен 192, то \fIbits\fP равно 24. .IP \[bu] Или же, если наиболее значимый байт номер сети больше или равен 128, то \fIbits\fP равно 16. .IP \[bu] В противном случае \fIbits\fP равно 8. .PP Если значение результата \fIbits\fP после определения больше или равно 8, но количество октетов, указанных в номере сети, превышает \fIbits/8\fP, то \fIbits\fP присваивается 8 кратное количество октетов, указанных на самом деле. .SH ПРИМЕРЫ Программа, представленная далее, показывает использование \fBinet_net_pton\fP() и \fBinet_net_ntop\fP(). В ней используется \fBinet_net_pton\fP() для преобразования адреса сети из значения в представленческом формате, переданном в первом аргументе командной строки, в двоичную форму; выводится полученное из \fBinet_net_pton\fP() значение. Затем используется \fBinet_net_ntop\fP() для преобразования двоичной формы обратно в представленческий формат, и выводится полученная строка. .PP Чтобы продемонстрировать, что \fBinet_net_pton\fP() может не записывать все байты аргумента \fInetp\fP, программе можно передать в командной строке необязательный второй аргумент — число, используемое для заполнения буфера перед вызовом \fBinet_net_pton\fP(). В строке результата программа показывает все байты буфера, возвращаемого \fBinet_net_pton\fP(), позволяя пользователю увидеть какие байты не изменялись \fBinet_net_pton\fP(). .PP Пример работы, показывающий, как \fBinet_net_pton\fP() прогнозирует количество бит в номере сети: .PP .in +4n .EX $ \fB./a.out 193.168\fP inet_net_pton() вернула: 24 inet_net_ntop() выдала: 193.168.0/24 Необработанный адрес: c1a80000 .EE .in .PP Демонстрируется, как \fBinet_net_pton\fP() не обнуляет неиспользованные байты в буфере результата: .PP .in +4n .EX $ \fB./a.out 193.168 0xffffffff\fP inet_net_pton() вернула: 24 inet_net_ntop() выдала: 193.168.0/24 Необработанный адрес: c1a800ff .EE .in .PP Демонстрируется, как \fBinet_net_pton\fP() расширяет прогнозируемый размер номера сети, если полученное количество байт в представленческой строке превышает прогнозируемое значение: .PP .in +4n .EX $ \fB./a.out 193.168.1.128\fP inet_net_pton() вернула: 32 inet_net_ntop() выдала: 193.168.1.128/32 Необработанный адрес: c1a80180 .EE .in .PP Явно указанный размер номера сети заменяет любой прогнозируемый (но все дополнительные байты, указанные явно, всё равно будут использованы \fBinet_net_pton\fP() для заполнения буфера результата): .PP .in +4n .EX $ \fB./a.out 193.168.1.128/24\fP inet_net_pton() вернула: 24 inet_net_ntop() выдала: 193.168.1/24 Необработанный адрес: c1a80180 .EE .in .SS "Исходный код программы" .\" SRC BEGIN (inet_net_pton.c) .EX /* Link with "\-lresolv" */ \& #include #include #include \& #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e } while (0) \& int main(int argc, char *argv[]) { char buf[100]; struct in_addr addr; int bits; \& if (argc < 2) { fprintf(stderr, "Usage: %s presentation\-form [addr\-init\-value]\en", argv[0]); exit(EXIT_FAILURE); } \& /* If argv[2] is supplied (a numeric value), use it to initialize the output buffer given to inet_net_pton(), so that we can see that inet_net_pton() initializes only those bytes needed for the network number. If argv[2] is not supplied, then initialize the buffer to zero (as is recommended practice). */ \& addr.s_addr = (argc > 2) ? strtod(argv[2], NULL) : 0; \& /* Convert presentation network number in argv[1] to binary. */ \& bits = inet_net_pton(AF_INET, argv[1], &addr, sizeof(addr)); if (bits == \-1) errExit("inet_net_ntop"); \& printf("inet_net_pton() returned: %d\en", bits); \& /* Convert binary format back to presentation, using \[aq]bits\[aq] returned by inet_net_pton(). */ \& if (inet_net_ntop(AF_INET, &addr, bits, buf, sizeof(buf)) == NULL) errExit("inet_net_ntop"); \& printf("inet_net_ntop() yielded: %s\en", buf); \& /* Display \[aq]addr\[aq] in raw form (in network byte order), so we can see bytes not displayed by inet_net_ntop(); some of those bytes may not have been touched by inet_net_ntop(), and so will still have any initial value that was specified in argv[2]. */ \& printf("Raw address: %x\en", htonl(addr.s_addr)); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМ. ТАКЖЕ" \fBinet\fP(3), \fBnetworks\fP(5) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitriy S. Seregin , 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 .