getgrent_r(3) Library Functions Manual getgrent_r(3) NOM getgrent_r, fgetgrent_r - Obtenir un enregistrement du fichier de groupes de maniere reentrante BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include 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 fonctionnalites pour la glibc (consulter feature_test_macros(7)) : getgrent_r() : _GNU_SOURCE fgetgrent_r() : Depuis la glibc 2.19 : _POSIX_C_SOURCE >= 200809L glibc 2.19 et anterieures : _ATFILE_SOURCE DESCRIPTION Les fonctions getgrent_r() et fgetgrent_r() sont les versions reentrantes des fonctions getgrent(3) et fgetgrent(3). La premiere lit l'enregistrement de groupe suivant a partir du flux initialise par setgrent(3). La seconde lit l'enregistrement de groupe suivant a partir du flux. La structure group est definie dans 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 termine par un pointeur NULL */ }; Pour plus d'informations a propos des champs de cette structure, consultez group(5). Les fonctions non reentrantes 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 reentrantes decrites 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 chaines supplementaires. Le resultat de ces fonctions, la structure group lue dans le flux, est enregistre dans le tampon *tampon_groupe fourni, et un pointeur vers cette structure group est renvoye dans *pointeur_tampon_groupe. VALEUR RENVOYEE Si elles reussissent, ces fonctions renvoient 0 et *pointeur_tampon_groupe est un pointeur vers la structure group. Si elles echouent, ces fonctions renvoient une valeur d'erreur et *pointeur_tampon_groupe est NULL. ERREURS ENOENT Il n'y a plus d'entrees. ERANGE L'espace tampon fourni est insuffisant. Veuillez essayer a nouveau avec un tampon plus grand. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +--------------+--------------------------+----------------------------+ |Interface | Attribut | Valeur | +--------------+--------------------------+----------------------------+ |getgrent_r() | Securite des threads | MT-Unsafe race:grent | | | | locale | +--------------+--------------------------+----------------------------+ |fgetgrent_r() | Securite 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 utilisees en parallele dans differents threads d'un programme, des situations de competition de donnees pourraient se produire. VERSIONS D'autres systemes 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); STANDARDS GNU. HISTORIQUE Ces fonctions sont ecrites dans un style ressemblant a la version POSIX de fonctions comme getpwnam_r(3). NOTES La fonction getgrent_r() n'est pas vraiment reentrante puisqu'elle partage la position de lecture dans le flux avec tous les autres threads. EXEMPLES #define _GNU_SOURCE #include #include #include #include #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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Lucien Gentis Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 getgrent_r(3)