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 gbuf, char buf[restrict .size], size_t size, struct group **restrict gbufp); int fgetgrent_r(FILE *restrict stream, struct group *restrict gbuf, char buf[restrict .size], size_t size, struct group **restrict gbufp); 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). The nonreentrant functions return a pointer to static storage, where this static storage contains further pointers to group name, password, and members. The reentrant functions described here return all of that in caller-provided buffers. First of all there is the buffer gbuf that can hold a struct group. And next the buffer buf of size size that can hold additional strings. The result of these functions, the struct group read from the stream, is stored in the provided buffer *gbuf, and a pointer to this struct group is returned in *gbufp. 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 buf[.size], int size); ou mieux, int getgrent_r(struct group *grp, char buf[.size], int size, 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.12 24 decembre 2024 getgrent_r(3)