random_r(3)

NUME
random_r, srandom_r, initstate_r, setstate_r - generator de numere aleatoare reentrante

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <stdlib.h>

int random_r(struct random_data *restrict buf,
             int32_t *restrict result);
int srandom_r(unsigned int seed, struct random_data *buf);

int initstate_r(unsigned int seed, char statebuf[restrict .statelen],
             size_t statelen, struct random_data *restrict buf);
int setstate_r(char *restrict statebuf,
             struct random_data *restrict buf);

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

random_r(), srandom_r(), initstate_r(), setstate_r():
    /* glibc >= 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

DESCRIERE
Aceste funcții sunt echivalentele reentrante ale funcțiilor descrise în random(3). Ele sunt adecvate pentru utilizarea în programe cu mai multe fire de execuție, în care fiecare fir de execuție trebuie să obțină o secvență independentă și reproductibilă de numere aleatoare.

Funcția random_r() este ca și random(3), cu excepția faptului că, în loc să utilizeze informațiile de stare păstrate într-o variabilă globală, utilizează informațiile de stare din argumentul indicat de buf, care trebuie să fi fost inițializat anterior de initstate_r(). Numărul aleatoriu generat este returnat în argumentul result.

Funcția srandom_r() este la fel ca srandom(3), cu excepția faptului că inițializează sămânța pentru generatorul de numere aleatoare a cărui stare este menținută în obiectul indicat de buf, care trebuie să fi fost inițializat în prealabil de initstate_r(), în loc de sămânța asociată cu variabila de stare globală.

Funcția initstate_r() este ca initstate(3), cu excepția faptului că inițializează starea în obiectul indicat de buf, în loc să inițializeze variabila de stare globală. Înainte de a apela această funcție, câmpul buf.state trebuie inițializat la NULL. Funcția initstate_r() înregistrează un indicator la argumentul statebuf în interiorul structurii indicate de buf. Astfel, statebuf nu trebuie să fie eliberat atâta timp cât buf este încă în uz; (așadar, statebuf ar trebui să fie alocat de obicei ca o variabilă statică sau să fie alocat pe grămadă cu ajutorul malloc(3) sau similar).

Funcția setstate_r() este ca setstate(3), cu excepția faptului că modifică starea din obiectul indicat de buf, în loc să modifice variabila de stare globală. state trebuie mai întâi să fi fost inițializat cu initstate_r() sau să fie rezultatul unui apel anterior al funcției setstate_r().

VALOAREA RETURNATĂ
Toate aceste funcții returnează 0 în caz de succes. În caz de eroare, se returnează -1, cu errno configurată pentru a indica eroarea.

ERORI

EINVAL
    O matrice de stare mai mică de 8 octeți a fost specificată la initstate_r().

EINVAL
    Argumentul statebuf sau buf la setstate_r() a fost NULL.

EINVAL
    Argumentul buf sau result din random_r() a fost NULL.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
random_r(), srandom_r(), initstate_r(), setstate_r() | Siguranța firelor | MT-Safe race:buf

STANDARDE
GNU.

ERORI
Interfața initstate_r() este confuză. Se pare că tipul random_data este menit să fie opac, dar implementarea cere utilizatorului fie să inițializeze câmpul buf.state la NULL, fie să elimine întreaga structură înainte de apel.

CONSULTAȚI ȘI
drand48(3), rand(3), random(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată 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.