Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       getprotoent_r, getprotobyname_r, getprotobynumber_r - obține intrarea protocolului (reentrante)

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <netdb.h>

       int getprotoent_r(struct protoent *restrict result_buf,
                         char buf[restrict .buflen], size_t buflen,
                         struct protoent **restrict result);
       int getprotobyname_r(const char *restrict name,
                         struct protoent *restrict result_buf,
                         char buf[restrict .buflen], size_t buflen,
                         struct protoent **restrict result);
       int getprotobynumber_r(int proto,
                         struct protoent *restrict result_buf,
                         char buf[restrict .buflen], size_t buflen,
                         struct protoent **restrict result);

   Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

       getprotoent_r(), getprotobyname_r(), getprotobynumber_r():
           Începând cu glibc 2.19:
               _DEFAULT_SOURCE
           glibc 2.19 și versiunile anterioare:
               _BSD_SOURCE || _SVID_SOURCE

DESCRIERE

       Funcțiile  getprotoent_r(),  getprotobyname_r() și getprotobynumber_r() sunt echivalentele reentrante ale
       funcțiilor getprotoent(3), getprotobyname(3) și getprotobynumber(3). Ele diferă prin modul în  care  este
       returnată  structura  protoent,  precum și prin semnătura de apelare a funcției și valoarea de returnare.
       Această pagină de manual descrie doar diferențele față de funcțiile nereentrante.

       În loc să returneze un indicator la o structură protoent alocată static ca rezultat al  funcției,  aceste
       funcții copiază structura în locația indicată de result_buf.

       Matricea  buf  este  utilizată  pentru  a  stoca  câmpurile  de șiruri de caractere indicate de structura
       protoent returnată; (funcțiile nereentrante  alocă  aceste  șiruri  de  caractere  în  memoria  statică).
       Dimensiunea  acestei  matrice  este  specificată  în  buflen.  Dacă buf este prea mică, apelul eșuează cu
       eroarea ERANGE, iar apelantul trebuie să încerce din nou cu o memorie tampon mai mare; (o memorie  tampon
       cu o lungime de 1024 octeți ar trebui să fie suficientă pentru majoritatea aplicațiilor).

       Dacă  apelul  funcției  obține  cu  succes  o  înregistrare  de protocol, atunci *result este stabilit la
       result_buf; în caz contrar, *result este stabilit la NULL.

VALOAREA RETURNATĂ

       În caz de succes, aceste funcții returnează 0. În caz de eroare, acestea returnează unul dintre  numerele
       pozitive de eroare enumerate în ERORI.

       În  caz  de eroare, înregistrare nedescoperită (getprotobyname_r(), getprotobynumber_r()), sau sfârșit de
       intrare (getprotoent_r()) result este stabilit la NULL.

ERORI-IEȘIRE

       ENOENT (getprotoent_r()) Nu mai există înregistrări în baza de date.

       ERANGE buf este prea mic. Încercați din nou cu o memorie tampon mai mare (și cu buflen mărit).

ATRIBUTE

       Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
       ┌──────────────────────────────────────────────────────────────────┬───────────────────┬────────────────┐
       │ InterfațăAtributValoare        │
       ├──────────────────────────────────────────────────────────────────┼───────────────────┼────────────────┤
       │ getprotoent_r(), getprotobyname_r(), getprotobynumber_r()        │ Siguranța firelor │ MT-Safe locale │
       └──────────────────────────────────────────────────────────────────┴───────────────────┴────────────────┘

VERSIUNI

       Funcții cu nume similare există și pe alte sisteme, deși, de obicei, cu semnături de apelare diferite.

STANDARDE

       GNU.

EXEMPLE

       Programul de mai jos utilizează getprotobyname_r() pentru  a  prelua  înregistrarea  protocolului  pentru
       protocolul  numit în primul său argument de linie de comandă. În cazul în care se furnizează un al doilea
       argument de linie de comandă (întreg), acesta este utilizat  ca  valoare  inițială  pentru  buflen;  dacă
       getprotobyname_r()  eșuează  cu  eroarea  ERANGE,  programul  încearcă din nou cu dimensiuni mai mari ale
       memoriei tampon. Următoarea sesiune shell prezintă câteva exemple de execuție:

           $ ./a.out tcp 1
           ERANGE! Reîncercare cu o memorie tampon mai mare
           getprotobyname_r() returned: 0 (success)  (buflen=78)
           p_name=tcp; p_proto=6; aliases=TCP
           $ ./a.out xxx 1
           ERANGE! Reîncercare cu o memorie tampon mai mare
           getprotobyname_r() returned: 0 (success)  (buflen=100)
           Apel eșuat/înregistrarea nu a fost găsită

   Sursa programului

       #define _GNU_SOURCE
       #include <ctype.h>
       #include <errno.h>
       #include <netdb.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       #define MAX_BUF 10000

       int
       main(int argc, char *argv[])
       {
           int buflen, erange_cnt, s;
           struct protoent result_buf;
           struct protoent *result;
           char buf[MAX_BUF];

           if (argc < 2) {
               printf("Utilizare: %s proto-name [buflen]\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           buflen = 1024;
           if (argc > 2)
               buflen = atoi(argv[2]);

           if (buflen > MAX_BUF) {
               printf("Limita memoriei tampon a fost depășită (%d)\n", MAX_BUF);
               exit(EXIT_FAILURE);
           }

           erange_cnt = 0;
           do {
               s = getprotobyname_r(argv[1], &result_buf,
                                    buf, buflen, &result);
               if (s == ERANGE) {
                   if (erange_cnt == 0)
                       printf("ERANGE! Reîncercare cu o memorie tampon mai mare\n");
                   erange_cnt++;

                   /* Incrementăm câte un octet pe rând, ca să putem vedea exact
                      ce dimensiune a fost necesară pentru memoria tampon. */

                   buflen++;

                   if (buflen > MAX_BUF) {
                       printf("Limita memoriei tampon a fost depășită (%d)\n", MAX_BUF);
                       exit(EXIT_FAILURE);
                   }
               }
           } while (s == ERANGE);

           printf("getprotobyname_r() returned: %s  (buflen=%d)\n",
                  (s == 0) ? "0 (success)" : (s == ENOENT) ? "ENOENT" :
                  strerror(s), buflen);

           if (s != 0 || result == NULL) {
               printf("Apel eșuat/înregistrarea nu a fost găsită\n");
               exit(EXIT_FAILURE);
           }

           printf("p_name=%s; p_proto=%d; aliases=",
                  result_buf.p_name, result_buf.p_proto);
           for (char **p = result_buf.p_aliases; *p != NULL; p++)
               printf("%s ", *p);
           printf("\n");

           exit(EXIT_SUCCESS);
       }

CONSULTAȚI ȘI

       getprotoent(3), protocols(5)

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   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.

Pagini de manual de Linux 6.9.1                   15 iunie 2024                                 getprotoent_r(3)