inet_ntop()

Преобразовать цифровой сетевой адрес в строку

Прототип:

#include <sys/socket.h>
#include <arpa/inet.h>
const char * inet_ntop( int af,
const void *src,
char *dst,
socklen_t size );

Аргументы:

af
Семейство сетевых адресов, к которому принадлежит src; одно из:
AF_INET
IPv4 адреса
AF_INET6
IPv6 адреса
src
Сетевой адрес, который необходимо конвертировать из числового формата в строковый.
dst
Буфер, в который будет помещён переведённый в текстовый формат сетевой адрес. Для выделения буфера корректного размера следует использовать следующие константы (определены в <netinet/in.h>):
INET_ADDRSTRLEN
Размер буфера для IPv4 адреса
INET6_ADDRSTRLEN
Размер буфера для IPv6 адреса
size
Размер буфера dst.

Библиотека:

libc

Описание:

Функция inet_ntop() преобразует сетевой адрес из числового представления, хранящегося в src, в строковое, которое помещает в dst.

Возвращаемое значение:

Указатель на буфер, содержащий текстовое представление адреса.

Если возникла ошибка функция возвращает NULL, код ошибки записывается в errno.

Коды ошибок:

EAFNOSUPPORT
Семейство сетевых адресов, указанное в параметре af, не поддерживается.
ENOSPC
Буфер dst имеет недостаточный для хранения переведённого адреса размер.

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
#define INADDR "10.1.0.29"
#define IN6ADDR "DEAD:BEEF:7654:3210:FEDC:3210:7654:BA98"
int main()
{
struct in_addr inaddr;
struct in6_addr in6addr;
char buf[INET_ADDRSTRLEN], buf6[INET6_ADDRSTRLEN];
int rval;
if ( (rval = inet_pton( AF_INET, INADDR, &inaddr )) == 0 )
{
printf( "Invalid address: %s\n", INADDR );
exit( EXIT_FAILURE );
} else
if ( rval == -1 )
{
perror( "inet_pton" );
exit( EXIT_FAILURE );
}
if ( inet_ntop( AF_INET, &inaddr, buf, sizeof( buf ) ) != NULL )
printf( "inet addr: %s\n", buf );
else {
perror( "inet_ntop" );
exit( EXIT_FAILURE );
}
if ( (rval = inet_pton( AF_INET6, IN6ADDR, &in6addr )) == 0 )
{
printf( "Invalid address: %s\n", IN6ADDR );
exit( EXIT_FAILURE );
} else
if ( rval == -1 )
{
perror( "inet_pton" );
exit( EXIT_FAILURE );
}
if ( inet_ntop( AF_INET6, &in6addr, buf6, sizeof( buf6 ) ) != NULL )
printf("inet6 addr: %s\n", buf6);
else {
perror( "inet_ntop" );
exit( EXIT_FAILURE );
}
return (EXIT_SUCCESS);
}

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

inet_pton()




Предыдущий раздел: Описание API системной библиотеки