getpwent_r(3)

NUME
getpwent_r, fgetpwent_r - obține intrarea din fișierul passwd în mod reentrant

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <pwd.h>

int getpwent_r(size_t size;
               struct passwd *restrict pwbuf,
               char buf[restrict size], size_t size,
               struct passwd **restrict pwbufp);
int fgetpwent_r(size_t size;
               FILE *restrict stream, struct passwd *restrict pwbuf,
               char buf[restrict size], size_t size,
               struct passwd **restrict pwbufp);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

getpwent_r(),
    Începând cu glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 și versiunile anterioare:
        _BSD_SOURCE || _SVID_SOURCE

fgetpwent_r():
    Începând cu glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 și versiunile anterioare:
        _SVID_SOURCE

DESCRIERE
Funcțiile getpwent_r() și fgetpwent_r() sunt versiunile reentrante ale getpwent(3) și fgetpwent(3). Prima citește următoarea intrare passwd din fluxul inițializat de setpwent(3). Cea de-a doua citește următoarea intrare passwd din stream.

Structura passwd este definită în <pwd.h> după cum urmează:

    struct passwd {
        char    *pw_name;      /* nume utilizator */
        char    *pw_passwd;    /* parolă utilizator */
        uid_t    pw_uid;       /* ID utilizator */
        gid_t    pw_gid;       /* ID grup */
        char    *pw_gecos;     /* informații utilizator */
        char    *pw_dir;       /* directorul personal */
        char    *pw_shell;     /* program shell */
    };

Pentru mai multe informații despre câmpurile acestei structuri, consultați passwd(5).

Funcțiile nereentrante returnează un indicator către o memorie statică, unde această memorie statică conține alți indicatori pentru numele de utilizator, parola, câmpul gecos, directorul principal și shell-ul. Funcțiile reentrante descrise aici returnează toate acestea în memorii tampon furnizate de apelant. În primul rând, există memoria tampon pwbuf care poate conține o struct passwd. Și apoi memoria tampon buf de dimensiune size care poate conține șiruri de caractere suplimentare. Rezultatul acestor funcții, struct passwd citit din flux, este stocat în memoria tampon furnizată *pwbuf, iar un indicator la această struct passwd este returnat în *pwbufp.

VALOAREA RETURNATĂ
În caz de succes, aceste funcții returnează 0, iar *pwbufp este un indicator la struct passwd. În caz de eroare, aceste funcții returnează o valoare de eroare, iar *pwbufp 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
getpwent_r() | Siguranța firelor | MT-Unsafe race:pwent locale
fgetpwent_r() | Siguranța firelor | MT-Safe

În tabelul de mai sus, pwent din race:pwent semnifică faptul că, dacă oricare dintre funcțiile setpwent(), getpwent(), endpwent() sau getpwent_r() sunt utilizate în paralel în diferite fire de execuție ale unui program, atunci pot apărea competiții de date.

VERSIUNI
Alte sisteme utilizează prototipul

    struct passwd *
    getpwent_r(struct passwd *pwd, char buf[.size], int size);

sau, mai bine zis,

    int
    getpwent_r(struct passwd *pwd, char buf[.size], int size,
               FILE **pw_fp);

STANDARDE
Niciunul.

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 getpwent_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 <pwd.h>
    #include <stdint.h>
    #include <stdio.h>
    #include <stdlib.h>

    #define BUFLEN 4096

    int
    main(void)
    {
        struct passwd pw;
        struct passwd *pwp;
        char buf[BUFLEN];
        int i;

        setpwent();
        while (1) {
            i = getpwent_r(&pw, buf, sizeof(buf), &pwp);
            if (i)
                break;
            printf("%s (%jd)\tHOME %s\tSHELL %s\n", pwp->pw_name,
                   (intmax_t) pwp->pw_uid, pwp->pw_dir, pwp->pw_shell);
        }
        endpwent();
        exit(EXIT_SUCCESS);
    }

CONSULTAȚI ȘI
fgetpwent(3), getpw(3), getpwent(3), getpwnam(3), getpwuid(3), putpwent(3), passwd(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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.