Loading

NOM

       getgrent_r, fgetgrent_r - Obtenir un enregistrement du fichier group de
       manière ré-entrante

SYNOPSIS

       #include <grp.h>

       int getgrent_r(struct group *gbuf, char *buf,
                      size_t buflen, struct group **gbufp);

       int fgetgrent_r(FILE *fp, struct group *gbuf, char *buf,
                       size_t buflen, struct group **gbufp);

   Exigences de  macros  de  test  de  fonctionnalités  pour  la  glibc  (voir
   feature_test_macros(7)) :

       getgrent_r() : _GNU_SOURCE
       fgetgrent_r() : _SVID_SOURCE

       Les   fonctions   getgrent_r()   et  fgetgrent_r()  sont  les  versions
       ré-entrantes des fonctions getgrent(3) et fgetgrent(3). La première lit
       l’enregistrement   group  suivant  à  partir  du  flux  initialisé  par
       setgrent(3). La seconde lit l’enregistrement group suivant à partir  du
       flux fp.

       La structure group est définie dans <grp.h> comme ceci :

           struct group {
               char    *gr_name;     /* Nom du groupe */
               char    *gr_passwd;   /* Mot de passe du groupe */
               gid_t    gr_gid;      /* ID du groupe */
               char   **gr_mem;      /* Membres du groupe*/
           };

       Les  fonctions  non  ré-entrantes  renvoient  un  pointeur sur une zone
       statique, zone qui contient d’autres pointeurs vers le nom, le  mot  de
       passe et les membres du groupe. Les fonctions ré-entrantes décrites ici
       renvoient tout ceci dans des tampons fournis par  l’appelant.  Il  y  a
       tout  d’abord  le tampon gbuf qui contient une structure group. Puis le
       tampon buf de taille buflen qui contient les  chaînes  supplémentaires.
       Le  résultat de ces fonctions, la structure group lue dans le flux, est
       enregistré dans le tampon *gbuf  fourni,  et  un  pointeur  vers  cette
       structure group est renvoyé dans *gbufp.

VALEUR RENVOYÉE

       Si  elles  réussissent,  ces  fonctions  renvoient  0  et *gbufp est un
       pointeur vers la structure group.  Si  elles  échouent,  ces  fonctions
       renvoient une valeur d’erreur et *gbufp est NULL.

ERREURS

       ENOENT Plus d’entrées.

       ERANGE L’espace  tampon  fourni  est  insuffisant.  Veuillez  essayer à
              nouveau avec un tampon plus grand.

CONFORMITÉ

       Ces fonctions  sont  des  extensions  GNU,  effectuées  dans  un  style
       ressemblant  à  la  version  POSIX  de  fonctions  comme getpwnam_r(3).
       D’autres systèmes utilisent le prototype

           struct group *getgrent_r(struct group *grp, char *buf,
                                    int buflen);

       ou mieux,

           int getgrent_r(struct group *grp, char *buf, int buflen,
                          FILE **gr_fp);

NOTES

       La fonction getgrent_r() n’est  pas  vraiment  ré-entrante  puisqu’elle
       partage  la  position de lecture dans le flux avec tous les autres fils
       (threads).

EXEMPLE

       #define _GNU_SOURCE
       #include <grp.h>
       #include <stdio.h>
       #include <stdlib.h>
       #define BUFLEN 4096

       int
       main(void)
       {
           struct group grp, *grpp;
           char buf[BUFLEN];
           int i;

           setgrent();
           while (1) {
               i = getgrent_r(&grp, buf, BUFLEN, &grpp);
               if (i)
                   break;
               printf("%s (%d):", grpp->gr_name, grpp->gr_gid);
               for (i = 0; ; i++) {
                   if (grpp->gr_mem[i] == NULL)
                       break;
                   printf(" %s", grpp->gr_mem[i]);
               }
               printf("\n");
           }
           endgrent();
           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       fgetgrent(3),  getgrent(3),  getgrgid(3),   getgrnam(3),   putgrent(3),
       group(5)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.23 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite et mise à  jour  par  Alain  Portal
       <aportal  AT  univ-montp2  DOT  fr>  entre  2004  et  2006,  et  mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
       francophone de traduction de Debian.

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

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document
       en utilisant la commande « man -L C <section> <page_de_man> ».