Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       getprotoent_r,   getprotobyname_r,  getprotobynumber_r  -  Acceder  aux
       protocoles (version reentrante)

SYNOPSIS

       #include <netdb.h>

       int getprotoent_r(struct protoent *result_buf, char *buf,
                       size_t buflen, struct protoent **result);

       int getprotobyname_r(const char *name,
                       struct protoent *result_buf, char *buf,
                       size_t buflen, struct protoent **result);

       int getprotobynumber_r(int proto,
                       struct protoent *result_buf, char *buf,
                       size_t buflen, struct protoent **result);

   Exigences de macros de test de fonctionnalites  pour  la  glibc  (consultez
   feature_test_macros(7)) :

       getprotoent_r(), getprotobyname_r(), getprotobynumber_r() :
           _BSD_SOURCE || _SVID_SOURCE

DESCRIPTION

       getprotoent_r(),   getprotobyname_r(),   et  getprotobynumber_r()  sont
       respectivement, les versions reentrantes des fonctions  getprotoent(3),
       getprotobyname(3),  et  getprotobynumber(3).  Elles  different  car  la
       structure protoent est renvoyee,  et  leur  signature  ainsi  que  leur
       valeur  de  retour  sont aussi differentes. Cette page de manuel decrit
       juste les differences depuis les fonctions non reentrantes.

       Au  lieu  de  retourner  un  pointeur  vers  une   structure   protoent
       statiquement  allouee,  ces  fonctions copient la structure a l'adresse
       pointee par result_buf.

       Le tableau buf est utilise pour sauvegarder les  champs  de  la  chaine
       pointes   par   la  structure  protoent  renvoyee  (les  fonctions  non
       reentrantes allouent ces chaines  de  facon  statique).  La  taille  du
       tableau  est  specifiee  avec  buflen.  Si  buf est trop petit, l'appel
       echoue avec l'erreur ERANGE, et l'appelant doit essayer de nouveau avec
       un  tableau  plus  grand  (un  tableau  de  1024  octets est en general
       suffisant).

       Si la fonction obtient un enregistrement  de  protocol,  alors  *result
       pointe vers result_buf sinon *result est defini a NULL.

VALEUR RENVOY'EE

       En  cas  de  succes, ces fonctions renvoient zero. En cas d'erreur, une
       valeur d'erreur positive listee dans ERREURS est renvoyee.

       Dans   le   cas   des   erreurs,   << enregistrement   non    trouve >>
       (getprotobyname_r(),  getprotobynumber_r())  ou  << fin  de l'entree >>
       (getprotoent_r()), result est defini a NULL.

ERREURS

       ENOENT (getprotoent_r()) Plus d'autre enregistrement dans la base.

       ERANGE buf est trop petit. Re-essayer avec un  tampon  plus  grand  (et
              augmentez buflen).

CONFORMIT'E

       Ces  fonctions  sont  des  extensions  GNU. Des fonctions avec des noms
       similaires existent sur d'autres systemes, bien que en general avec des
       signatures d'appels different.

EXEMPLE

       Le  programme  ci-dessous  utilise  getprotobyname_r()  pour  recuperer
       l'enregistrement de  protocole  du  protocole  nomme  dans  le  premier
       argument de sa ligne de commande. Si un second argument (un entier) est
       fourni,  il  est  utilise  comme  valeur   initiale   de   buflen.   Si
       getprotobyname_r() echoue avec l'erreur ERANGE, le programme recommence
       avec une taille de tampon plus grande. La session shell suivante montre
       des exemples d'utilisation.

           $ ./a.out tcp 1
           ERANGE! Retrying with larger buffer
           getprotobyname_r() returned: 0 (success)  (buflen=78)
           p_name=tcp; p_proto=6; aliases=TCP
           $ ./a.out xxx 1
           ERANGE! Retrying with larger buffer
           getprotobyname_r() returned: 0 (success)  (buflen=100)
           Call failed/record not found

   Source du programme

       #define _GNU_SOURCE
       #include <ctype.h>
       #include <netdb.h>
       #include <stdlib.h>
       #include <stdio.h>
       #include <errno.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];
           char **p;

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

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

           if (buflen > MAX_BUF) {
               printf("Exceeded buffer limit (%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! Retrying with larger buffer\n");
                   erange_cnt++;

                   /* Increment a byte at a time so we can see exactly
                      what size buffer was required */

                   buflen++;

                   if (buflen > MAX_BUF) {
                       printf("Exceeded buffer limit (%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("Call failed/record not found\n");
               exit(EXIT_FAILURE);
           }

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

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       getprotoent(3), protocols(5)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone       au       sein        du        projet        perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Florentin   Duneau   et   l'equipe   francophone   de   traduction   de
       Debian (2006-2009).

       Veuillez  signaler  toute  erreur   de   traduction   en   ecrivant   a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir acces a la version anglaise de  ce  document
       en utilisant la commande << man -L C <section> <page_de_man> >>.