Provided by: manpages-ro-dev_4.28.0-2_all 

NUME
getgrent_r, fgetgrent_r - obține intrarea fișierului de grup în mod reentrant
BIBLIOTECA
Biblioteca C standard (libc, -lc)
SINOPSIS
#include <grp.h>
int getgrent_r(struct group *restrict gbuf,
char buf[restrict .buflen], size_t buflen,
struct group **restrict gbufp);
int fgetgrent_r(FILE *restrict stream, struct group *restrict gbuf,
char buf[restrict .buflen], size_t buflen,
struct group **restrict gbufp);
Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):
getgrent_r():
_GNU_SOURCE
fgetgrent_r():
Începând cu glibc 2.19:
_DEFAULT_SOURCE
glibc 2.19 și versiunile anterioare:
_SVID_SOURCE
DESCRIERE
Funcțiile getgrent_r() și fgetgrent_r() sunt versiunile reentrante ale funcțiilor getgrent(3) și
fgetgrent(3). Prima citește următoarea intrare de grup din fluxul inițializat de setgrent(3). Cea de-a
doua citește următoarea intrare de grup din stream.
Structura group este definită în <grp.h> după cum urmează:
struct group {
char *gr_name; /* numele grupului */
char *gr_passwd; /* parola grupului */
gid_t gr_gid; /* identificatorul grupului */
char **gr_mem; /* vector de indicatori cu terminație NULL
la numele membrilor grupului */
};
Pentru mai multe informații despre câmpurile acestei structuri, a se vedea group(5).
Funcțiile care nu sunt reentrante returnează un indicator către stocarea statică, unde această stocare
statică conține alți indicatori către numele grupului, parola și membrii. Funcțiile reentrante descrise
aici returnează toate acestea în memoriile tampon furnizate de apelant. În primul rând, există o memorie
tampon gbuf care poate conține o structură de grup. Și apoi tamponul buf de dimensiune buflen care poate
conține șiruri de caractere suplimentare. Rezultatul acestor funcții, structura de grup citită din flux,
este stocată în memoria tampon furnizată *gbuf, iar un indicator la această structură de grup este
returnat în *gbufp.
VALOAREA RETURNATĂ
În caz de succes, aceste funcții returnează 0, iar *gbufp este un indicator la structura de grup. În caz
de eroare, aceste funcții returnează o valoare de eroare, iar *gbufp este NULL.
ERORI-IEȘIRE
ENOENT Nu mai există alte intrări.
ERANGE Spațiu de memorie tampon furnizat insuficient. Încercați din nou cu o memorie tampon mai mare.
ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
┌───────────────┬───────────────────┬───────────────────────────────────────────────────────────────────┐
│ Interfață │ Atribut │ Valoare │
├───────────────┼───────────────────┼───────────────────────────────────────────────────────────────────┤
│ getgrent_r() │ Siguranța firelor │ MT-Unsafe race:grent locale │
├───────────────┼───────────────────┼───────────────────────────────────────────────────────────────────┤
│ fgetgrent_r() │ Siguranța firelor │ MT-Safe │
└───────────────┴───────────────────┴───────────────────────────────────────────────────────────────────┘
În tabelul de mai sus, grent din race:grent semnifică faptul că, dacă oricare dintre funcțiile
setgrent(3), getgrent(3), endgrent(3) sau getgrent_r() sunt utilizate în paralel în diferite fire de
execuție ale unui program, pot apărea competiții de date.
VERSIUNI
Alte sisteme utilizează prototipul
struct group *getgrent_r(struct group *grp, char *buf,
int buflen);
sau, mai bine zis,
int getgrent_r(struct group *grp, char *buf, int buflen,
FILE **gr_fp);
STANDARDE
GNU.
ISTORIC
Aceste funcții sunt realizate într-un stil asemănător cu versiunea POSIX a unor funcții precum
getpwnam_r(3).
NOTE
Funcția getgrent_r() nu este cu adevărat reentrantă, deoarece împarte poziția de citire în flux cu toate
celelalte fire de execuție.
EXEMPLE
#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);
}
CONSULTAȚI ȘI
fgetgrent(3), getgrent(3), getgrgid(3), getgrnam(3), putgrent(3), group(5)
TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o
versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO
RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
ro@lists.sourceforge.net.
Pagini de manual de Linux 6.9.1 15 iunie 2024 getgrent_r(3)