Provided by: manpages-fr-dev_4.19.0-7_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⟩.