Provided by: manpages-fr_1.67.0-1_all bug

NOM

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

SYNOPSIS

       #define _GNU_SOURCE
       #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);

DESCRIPTION

       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 passé en paramètre.

       La structure group est définie dans <grp.h> de la manière suivante :

              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.

EXEMPLE

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

       int main() {
             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();
             return 0;
       }

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).

VOIR AUSSI

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

TRADUCTION

       Ce  document  est  une traduction réalisée par Alain Portal <aportal AT
       univ-montp2 DOT fr> le 8 juillet 2005 et révisée le 14 décembre 2005.

       L’équipe de traduction a fait le maximum pour réaliser  une  adaptation
       française de qualité. La version anglaise la plus à jour de ce document
       est      toujours       consultable       via       la       commande :
       « LANG=en man 3 getgrent_r ».   N’hésitez  pas à signaler à l’auteur ou
       au traducteur, selon le cas, toute erreur dans cette page de manuel.