Provided by: manpages-ro-dev_4.21.0-2_all
NUME
inet_pton - convertește adresele IPv4 și IPv6 din format text în format binar
BIBLIOTECA
Biblioteca C standard (libc, -lc)
REZUMAT
#include <arpa/inet.h> int inet_pton(int af, const char *restrict src, void *restrict dst);
DESCRIERE
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: AF_INET src indică un șir de caractere care conține o adresă de rețea IPv4 în format zecimal punctat, "ddd.ddd.ddd.ddd.ddd", unde ddd este un număr zecimal de până la trei cifre în intervalul 0-255. Adresa este convertită într-o structură struct in_addr și copiată în dst, care trebuie să aibă o lungime de sizeof(struct in_addr) (4) octeți (32 de biți). AF_INET6 src indică un șir de caractere care conține o adresă de rețea IPv6. Adresa este convertită într-o structură struct in6_addr și copiată în dst, care trebuie să aibă o lungime de sizeof(struct in6_addr) (16) octeți (128 de biți). Formatele permise pentru adresele IPv6 respectă următoarele reguli: • Formatul preferat este x:x:x:x:x:x:x:x. Acest format este format din opt numere hexazecimale, fiecare dintre acestea exprimând o valoare pe 16 biți (adică fiecare x poate avea până la 4 cifre hexazecimale). • O serie de valori zero contigue în formatul preferat poate fi prescurtată ::. Într-o adresă nu poate apărea decât un singur element ::. De exemplu, adresa loopback 0:0:0:0:0:0:0:1 poate fi abreviată ca ::1. Adresa „joker”, formată toată din zerouri, poate fi scrisă ca ::. • Un format alternativ este util pentru exprimarea adreselor IPv4 transpuse în adrese IPv6. Acest format se scrie ca x:x:x:x:x:x:d.d.d.d, unde cele șase x din față sunt valori hexazecimale care definesc cele mai semnificative șase părți de 16 biți ale adresei (adică 96 de biți), iar d exprimă o valoare în notație zecimală punctată care definește cei mai puțin semnificativi 32 de biți ai adresei. Un exemplu de astfel de adresă este ::FFFF:204.152.189.116. A se vedea RFC 2373 pentru detalii suplimentare privind reprezentarea adreselor IPv6.
VALOAREA RETURNATĂ
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.
ATRIBUTE
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 │ └────────────────────────────────────────────────────┴───────────────────┴────────────────┘
STANDARDE
POSIX.1-2001, POSIX.1-2008.
NOTE
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).
ERORI
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.
EXEMPLE
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 Sursa programului #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); }
CONSULTAȚI ȘI
getaddrinfo(3), inet(3), inet_ntop(3)
TRADUCERE
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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.