Scroll to navigation

random_r(3) Library Functions Manual random_r(3)

NUME

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

BIBLIOTECA

Biblioteca C standard (libc, -lc)

SINOPSIS

#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-IEȘIRE

O matrice de stare mai mică de 8 octeți a fost specificată la initstate_r().
Argumentul statebuf sau buf la setstate_r() a fost NULL.
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

Aceste funcții sunt extensii glibc nestandardizate.

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 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.

5 februarie 2023 Pagini de manual de Linux 6.03