getrandom(2) System Calls Manual getrandom(2) NUME getrandom - obine o serie de octei aleatorii BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include ssize_t getrandom(size_t buflen; void buf[buflen], size_t buflen, unsigned int flags); DESCRIERE Apelul de sistem getrandom() umple memoria tampon indicata de buf cu pana la buflen octei aleatorii. Aceti octei pot fi utilizai pentru insamanarea generatoarelor de numere aleatorii din spaiul utilizatorului sau in scopuri criptografice. In mod implicit, getrandom() extrage entropia din sursa urandom (adica aceeai sursa ca dispozitivul /dev/urandom). Acest comportament poate fi modificat prin intermediul argumentului flags. Daca sursa urandom a fost iniializata, citirile de pana la 256 de octei vor returna intotdeauna numarul de octei solicitat i nu vor fi intrerupte de semnale. Nu se aplica astfel de garanii pentru dimensiuni mai mari ale memoriei tampon. De exemplu, daca apelul este intrerupt de un gestionar de semnal, acesta poate returna un tampon parial umplut sau poate eua cu eroarea EINTR. Daca sursa urandom nu a fost inca iniializata, atunci getrandom() se va bloca, cu excepia cazului in care GRND_NONBLOCK este specificat in flags. Argumentul flags este o masca de bii care poate conine zero sau mai multe dintre urmatoarele valori unite impreuna printr-un operator SAU logic: GRND_RANDOM Daca acest bit este activat, atunci octeii aleatorii sunt extrai din sursa random (adica aceeai sursa ca dispozitivul /dev/random) in locul sursei urandom. Sursa random este limitata pe baza entropiei care poate fi obinuta din zgomotul ambiental. Daca numarul de octei disponibili in sursa random este mai mic decat cel solicitat in buflen, apelul returneaza doar octeii aleatori disponibili. Daca nu sunt disponibili octei aleatorii, comportamentul depinde de prezena GRND_NONBLOCK in argumentul flags. GRND_NONBLOCK In mod implicit, atunci cand citete din sursa random, getrandom() se blocheaza daca nu sunt disponibili octei aleatori, iar atunci cand citete din sursa urandom, se blocheaza daca fondul de entropie nu a fost inca iniializat. Daca fanionul GRND_NONBLOCK este activat, atunci getrandom() nu se blocheaza in aceste cazuri, ci returneaza imediat -1 cu errno configurata la EAGAIN. VALOAREA RETURNATA In caz de succes, getrandom() returneaza numarul de octei care au fost copiai in memoria tampon buf. Acesta poate fi mai mic decat numarul de octei solicitat prin buflen daca fie GRND_RANDOM a fost specificat in flags i entropia a fost insuficienta in sursa random, fie apelul sistemului a fost intrerupt de un semnal. In caz de eroare, se returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EAGAIN Entropia solicitata nu a fost disponibila, iar getrandom() s-ar fi blocat daca flagul GRND_NONBLOCK nu era activat. EFAULT Adresa menionata de buf se afla in afara spaiului de adrese accesibil. EINTR Apelul a fost intrerupt de un gestionar de semnal; consultai descrierea modului in care apelurile read(2) intrerupte pe dispozitive ,,lente" sunt gestionate cu i fara fanionul SA_RESTART in pagina de manual signal(7). EINVAL In flags a fost specificat un fanion nevalid. ENOSYS Funcia de invaluire a glibc pentru getrandom() a determinat ca nucleul subiacent nu implementeaza acest apel de sistem. STANDARDE Linux. ISTORIC Linux 3.17, glibc 2.25. NOTE Pentru o prezentare generala i o comparaie a diverselor interfee care pot fi utilizate pentru a obine caracterul aleatoriu, a se vedea random(7). tataSpre deosebire de /dev/random i /dev/urandom, getrandom() nu implica utilizarea numelor de ruta sau a descriptorilor de fiiere. Astfel, getrandom() poate fi util in cazurile in care chroot(2) face invizibile numele de ruta /dev i in care o aplicaie (de exemplu, un demon in timpul lansarii) inchide un descriptor de fiier pentru unul dintre aceste fiiere care a fost deschis de o biblioteca. Numarul maxim de octei returnai Incepand cu Linux 3.19 se aplica urmatoarele limite: o La citirea din sursa urandom, un singur apel la getrandom() returneaza maximum 32Mi-1 octei pe sistemele in care int are o dimensiune de 32 de bii. o La citirea din sursa random, se returneaza un maxim de 512 octei. Intreruperea de catre un gestionar de semnal La citirea din sursa urandom (GRND_RANDOM nu este activat), getrandom() se va bloca pana cand fondul de entropie a fost iniializat (cu excepia cazului in care a fost specificat fanionul GRND_NONBLOCK). Daca se solicita citirea unui numar mare de octei (mai mult de 256), getrandom() se va bloca pana cand aceti octei au fost generai i transferai din memoria nucleului in buf. Atunci cand se citete din sursa random (GRND_RANDOM este activat), getrandom() se va bloca pana cand unii octei aleatori devin disponibili (cu excepia cazului in care a fost specificat fanionul GRND_NONBLOCK). Comportamentul atunci cand un apel la getrandom() care este blocat in timp ce citete din sursa urandom este intrerupt de un gestionar de semnal depinde de starea de iniializare a tamponului de entropie i de dimensiunea cererii, buflen. Daca entropia nu este inca iniializata, atunci apelul eueaza cu eroarea EINTR. Daca fondul de entropie a fost iniializat i dimensiunea cererii este mare (buflen > 256), apelul fie reuete, returnand un tampon parial umplut, fie eueaza cu eroarea EINTR. Daca fondul de entropie a fost iniializat i dimensiunea cererii este mica (buflen <= 256), atunci getrandom() nu va eua cu EINTR. In schimb, va returna toi octeii care au fost solicitai. La citirea din sursa random, cererile de blocare de orice dimensiune pot fi intrerupte de un gestionar de semnal (apelul eueaza 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 in prezent acceptat de glibc. Utilizatorul aplicaiei getrandom() trebuie sa verifice intotdeauna valoarea returnata, pentru a determina daca s-a produs o eroare sau daca s-au returnat mai puini octei decat s-a solicitat. In cazul in care GRND_RANDOM nu este specificat i buflen este mai mic sau egal cu 256, o returnare de mai puini octei decat s-a solicitat nu ar trebui sa se intample niciodata, dar programatorul atent va verifica acest lucru oricum! ERORI Incepand cu Linux 3.19, exista urmatoarea eroare: o In funcie de sarcina CPU, getrandom() nu reacioneaza la intreruperi inainte de a citi toi octeii solicitai. CONSULTAI I getentropy(3), random(4), urandom(4), random(7), signal(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.15 28 iunie 2025 getrandom(2)