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

NUME
getrandom - obține o serie de octeți aleatorii
BIBLIOTECA
Biblioteca C standard (libc, -lc)
SINOPSIS
#include <sys/random.h>
ssize_t getrandom(void buf[.buflen], size_t buflen, unsigned int flags);
DESCRIERE
Apelul de sistem getrandom() umple memoria tampon indicată de buf cu până la buflen octeți aleatorii.
Acești octeți pot fi utilizați pentru însămânțarea generatoarelor de numere aleatorii din spațiul
utilizatorului sau în scopuri criptografice.
În mod implicit, getrandom() extrage entropia din sursa urandom (adică aceeași sursă ca dispozitivul
/dev/urandom). Acest comportament poate fi modificat prin intermediul argumentului flags.
Dacă sursa urandom a fost inițializată, citirile de până la 256 de octeți vor returna întotdeauna numărul
de octeți solicitat și nu vor fi întrerupte de semnale. Nu se aplică astfel de garanții pentru
dimensiuni mai mari ale memoriei tampon. De exemplu, dacă apelul este întrerupt de un gestionar de
semnal, acesta poate returna un tampon parțial umplut sau poate eșua cu eroarea EINTR.
Dacă sursa urandom nu a fost încă inițializată, atunci getrandom() se va bloca, cu excepția cazului în
care GRND_NONBLOCK este specificat în flags.
Argumentul flags este o mască de biți care poate conține zero sau mai multe dintre următoarele valori
unite împreună printr-un operator SAU logic:
GRND_RANDOM
Dacă acest bit este activat, atunci octeții aleatorii sunt extrași din sursa random (adică aceeași
sursă ca dispozitivul /dev/random) în locul sursei urandom. Sursa random este limitată pe baza
entropiei care poate fi obținută din zgomotul ambiental. Dacă numărul de octeți disponibili în
sursa random este mai mic decât cel solicitat în buflen, apelul returnează doar octeții aleatori
disponibili. Dacă nu sunt disponibili octeți aleatorii, comportamentul depinde de prezența
GRND_NONBLOCK în argumentul flags.
GRND_NONBLOCK
În mod implicit, atunci când citește din sursa random, getrandom() se blochează dacă nu sunt
disponibili octeți aleatori, iar atunci când citește din sursa urandom, se blochează dacă fondul
de entropie nu a fost încă inițializat. Dacă fanionul GRND_NONBLOCK este activat, atunci
getrandom() nu se blochează în aceste cazuri, ci returnează imediat -1 cu errno configurată la
EAGAIN.
VALOAREA RETURNATĂ
În caz de succes, getrandom() returnează numărul de octeți care au fost copiați în memoria tampon buf.
Acesta poate fi mai mic decât numărul de octeți solicitat prin buflen dacă fie GRND_RANDOM a fost
specificat în flags și entropia a fost insuficientă în sursa random, fie apelul sistemului a fost
întrerupt de un semnal.
În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.
ERORI-IEȘIRE
EAGAIN Entropia solicitată nu a fost disponibilă, iar getrandom() s-ar fi blocat dacă flagul
GRND_NONBLOCK nu era activat.
EFAULT Adresa menționată de buf se află în afara spațiului de adrese accesibil.
EINTR Apelul a fost întrerupt de un gestionar de semnal; consultați descrierea modului în care apelurile
read(2) întrerupte pe dispozitive „lente” sunt gestionate cu și fără fanionul SA_RESTART în pagina
de manual signal(7).
EINVAL În flags a fost specificat un fanion nevalid.
ENOSYS Funcția de învăluire a glibc pentru getrandom() a determinat că nucleul subiacent nu implementează
acest apel de sistem.
STANDARDE
Linux.
ISTORIC
Linux 3.17, glibc 2.25.
NOTE
Pentru o prezentare generală și o comparație a diverselor interfețe care pot fi utilizate pentru a obține
caracterul aleatoriu, a se vedea random(7).
tătăSpre deosebire de /dev/random și /dev/urandom, getrandom() nu implică utilizarea numelor de rută sau
a descriptorilor de fișiere. Astfel, getrandom() poate fi util în cazurile în care chroot(2) face
invizibile numele de rută /dev și în care o aplicație (de exemplu, un demon în timpul lansării) închide
un descriptor de fișier pentru unul dintre aceste fișiere care a fost deschis de o bibliotecă.
Numărul maxim de octeți returnați
Începând cu Linux 3.19 se aplică următoarele limite:
• La citirea din sursa urandom, un singur apel la getrandom() returnează maximum 32Mi-1 octeți pe
sistemele în care int are o dimensiune de 32 de biți.
• La citirea din sursa random, se returnează un maxim de 512 octeți.
Întreruperea de către un gestionar de semnal
La citirea din sursa urandom (GRND_RANDOM nu este activat), getrandom() se va bloca până când fondul de
entropie a fost inițializat (cu excepția cazului în care a fost specificat fanionul GRND_NONBLOCK). Dacă
se solicită citirea unui număr mare de octeți (mai mult de 256), getrandom() se va bloca până când acești
octeți au fost generați și transferați din memoria nucleului în buf. Atunci când se citește din sursa
random (GRND_RANDOM este activat), getrandom() se va bloca până când unii octeți aleatori devin
disponibili (cu excepția cazului în care a fost specificat fanionul GRND_NONBLOCK).
Comportamentul atunci când un apel la getrandom() care este blocat în timp ce citește din sursa urandom
este întrerupt de un gestionar de semnal depinde de starea de inițializare a tamponului de entropie și de
dimensiunea cererii, buflen. Dacă entropia nu este încă inițializată, atunci apelul eșuează cu eroarea
EINTR. Dacă fondul de entropie a fost inițializat și dimensiunea cererii este mare (buflen > 256), apelul
fie reușește, returnând un tampon parțial umplut, fie eșuează cu eroarea EINTR. Dacă fondul de entropie a
fost inițializat și dimensiunea cererii este mică (buflen <= 256), atunci getrandom() nu va eșua cu
EINTR. În schimb, va returna toți octeții care au fost solicitați.
La citirea din sursa random, cererile de blocare de orice dimensiune pot fi întrerupte de un gestionar de
semnal (apelul eșuează cu eroarea EINTR).
Utilizarea getrandom() pentru a citi tampoane mici (<= 256 bytes) din sursa urandom este modul preferat
de utilizare.
Tratamentul special al valorilor mici ale buflen a fost conceput pentru compatibilitate cu getentropy(3)
de la OpenBSD, care este în prezent acceptat de glibc.
Utilizatorul aplicației getrandom() trebuie să verifice întotdeauna valoarea returnată, pentru a
determina dacă s-a produs o eroare sau dacă s-au returnat mai puțini octeți decât s-a solicitat. În cazul
în care GRND_RANDOM nu este specificat și buflen este mai mic sau egal cu 256, o returnare de mai puțini
octeți decât s-a solicitat nu ar trebui să se întâmple niciodată, dar programatorul atent va verifica
acest lucru oricum!
ERORI
Începând cu Linux 3.19, există următoarea eroare:
• În funcție de sarcina CPU, getrandom() nu reacționează la întreruperi înainte de a citi toți octeții
solicitați.
CONSULTAȚI ȘI
getentropy(3), random(4), urandom(4), random(7), signal(7)
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 2 mai 2024 getrandom(2)