Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

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

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <grp.h>

       int getgrent_r(struct group *restrict tampon_groupe,
                      char tampon[restrict .taille_tampon], size_t taille_tampon,
                      struct group **restrict pointeur_tampon_groupe);
       int fgetgrent_r(FILE *restrict flux, struct group *restrict tampon_groupe,
                      char tampon[restrict .taille_tampon], size_t taille_tampon,
                      struct group **restrict pointeur_tampon_groupe);

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

       getgrent_r() :
           _GNU_SOURCE

       fgetgrent_r() :
           Depuis la glibc 2.19 :
               _DEFAULT_SOURCE
           glibc 2.19 et antérieures :
               _SVID_SOURCE

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  de  groupe  suivant  à  partir  du  flux  initialisé  par
       setgrent(3). La seconde lit l'enregistrement de groupe suivant à partir du flux.

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

           struct group {
               char   *gr_name;        /* nom de groupe */
               char   *gr_passwd;      /* mot de passe de groupe */
               gid_t   gr_gid;         /* identifiant de groupe */
               char  **gr_mem;         /* tableau de pointeurs de nom des membres de groupe
                                          terminé par un pointeur NULL */
           };

       Pour plus d'informations à propos des champs de cette structure, consultez group(5).

       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 cela dans des tampons fournis par l'appelant. Il y a tout d'abord le tampon tampon_groupe
       qui peut contenir une structure group, puis le tampon tampon de taille taille_tampon  qui  peut  contenir
       des  chaînes  supplémentaires.  Le  résultat  de  ces fonctions, la structure group lue dans le flux, est
       enregistré dans le tampon *tampon_groupe fourni, et un pointeur vers cette structure  group  est  renvoyé
       dans *pointeur_tampon_groupe.

VALEUR RENVOYÉE

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

ERREURS

       ENOENT Il n'y a plus d'entrées.

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

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌──────────────┬──────────────────────┬──────────────────────────────────────────────────────────────────┐
       │InterfaceAttributValeur                                                           │
       ├──────────────┼──────────────────────┼──────────────────────────────────────────────────────────────────┤
       │getgrent_r()  │ Sécurité des threads │ MT-Unsafe race:grent locale                                      │
       ├──────────────┼──────────────────────┼──────────────────────────────────────────────────────────────────┤
       │fgetgrent_r() │ Sécurité des threads │ MT-Safe                                                          │
       └──────────────┴──────────────────────┴──────────────────────────────────────────────────────────────────┘
       Dans  la  table  ci-dessus,  grent  dans  race:grent  signifie  que  si  des fonctions parmi setgrent(3),
       getgrent(3), endgrent(3) ou getgrent_r()  sont  utilisées  en  parallèle  dans  différents  threads  d'un
       programme, des situations de compétition de données pourraient se produire.

STANDARDS

       Ces  fonctions  sont des extensions GNU écrites 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 *tampon,
                                    int taille_tampon);

       ou mieux,

           int getgrent_r(struct group *grp, char *tampon, int taille_tampon,
                          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 threads.

EXEMPLES

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

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

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

VOIR AUSSI

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

TRADUCTION

       La   traduction   française   de   cette   page   de   manuel   a   été   créée   par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>,  François  Micaux,  Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,      Thomas      Huriaux      <thomas.huriaux@gmail.com>,     Nicolas     François
       <nicolas.francois@centraliens.net>,    Florentin    Duneau    <fduneau@gmail.com>,     Simon     Paillard
       <simon.paillard@resel.enst-bretagne.fr>,     Denis    Barbier    <barbier@debian.org>,    David    Prévot
       <david@tilapin.org> et Lucien Gentis <lucien.gentis@waika9.com>

       Cette traduction est une documentation libre ; veuillez vous reporter à la  GNU  General  Public  License
       version 3   ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les  conditions  de  copie  et  de
       distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,  veuillez  envoyer  un  message  à
       ⟨debian-l10n-french@lists.debian.org⟩.