| inet_pton(3) | Library Functions Manual | inet_pton(3) |
inet_pton - convertește adresele IPv4 și IPv6 din format text în format binar
Biblioteca C standard (libc, -lc)
#include <arpa/inet.h>
int inet_pton(int af, const char *restrict src, void *restrict dst);
Această funcție convertește șirul de caractere src într-o structură de adrese de rețea din familia de adrese af, apoi copiază structura de adrese de rețea în dst. Argumentul af trebuie să fie fie AF_INET sau AF_INET6. dst este scris în ordinea octeților rețelei.
În prezent, sunt acceptate următoarele familii de adrese:
inet_pton() returnează 1 în caz de succes (adresa de rețea a fost convertită cu succes). Se returnează 0 dacă src nu conține un șir de caractere care să reprezinte o adresă de rețea validă în familia de adrese specificată. Dacă af nu conține o familie de adrese validă, se returnează -1, iar errno este configurată la EAFNOSUPPORT.
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
| Interfață | Atribut | Valoare |
| inet_pton() | Siguranța firelor | MT-Safe locale |
POSIX.1-2001, POSIX.1-2008.
Spre deosebire de inet_aton(3) și inet_addr(3), inet_pton() acceptă adrese IPv6. Pe de altă parte, inet_pton() acceptă numai adrese IPv4 în notație zecimală punctată, în timp ce inet_aton(3) și inet_addr(3) acceptă notația mai generală numere și puncte (formate de numere hexazecimale și octale și formate care nu necesită scrierea explicită a tuturor celor patru octeți). Pentru o interfață care gestionează atât adrese IPv6, cât și adrese IPv4 în notație numere și puncte, a se vedea getaddrinfo(3).
AF_INET6 nu recunoaște adresele IPv4. În schimb, în src trebuie furnizată o adresă IPv4 explicită, care să fie transpusă într-o adresă IPv6.
Programul de mai jos demonstrează utilizarea inet_pton() și inet_ntop(3). Iată câteva exemple de execuție:
$ ./a.out i6 0:0:0:0:0:0:0:0 :: $ ./a.out i6 1:0:0:0:0:0:0:8 1::8 $ ./a.out i6 0:0:0:0:0:FFFF:204.152.189.116 ::ffff:204.152.189.116
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char *argv[])
{
unsigned char buf[sizeof(struct in6_addr)];
int domain, s;
char str[INET6_ADDRSTRLEN];
if (argc != 3) {
fprintf(stderr, "Utilizare: %s {i4|i6|<num>} șir\n", argv[0]);
exit(EXIT_FAILURE);
}
domain = (strcmp(argv[1], "i4") == 0) ? AF_INET :
(strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]);
s = inet_pton(domain, argv[2], buf);
if (s <= 0) {
if (s == 0)
fprintf(stderr, "Nu este în format de prezentare");
else
perror("inet_pton");
exit(EXIT_FAILURE);
}
if (inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL) {
perror("inet_ntop");
exit(EXIT_FAILURE);
}
printf("%s\n", str);
exit(EXIT_SUCCESS);
}
getaddrinfo(3), inet(3), inet_ntop(3)
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
| 5 februarie 2023 | Pagini de manual de Linux 6.03 |