.\" -*- coding: UTF-8 -*- .\" Copyright 2014, Theodore Ts'o .\" Copyright 2015, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getrandom 2 "8 февраля 2026 г." "Справочные страницы Linux 6.17" .SH НАИМЕНОВАНИЕ getrandom \- возвращает серию произвольных байт .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP,\ \fI\-lc\fP) .SH ОБЗОР .nf \fB#include \fP .P \fBssize_t getrandom(\fPsize_t size; \fB void \fP\fIbuf\fP\fB[\fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP .fi .SH ОПИСАНИЕ The \fBgetrandom\fP() system call fills the buffer pointed to by \fIbuf\fP with up to \fIsize\fP random bytes. These bytes can be used to seed user\-space random number generators or for cryptographic purposes. .P По умолчанию, \fBgetrandom\fP() забирает энтропию из источника \fIurandom\fP (т. е., того же источника что и устройство \fI/dev/urandom\fP). Это поведение можно изменить через параметр \fIflags\fP. .P Если источник \fIurandom\fP инициализирован, то из него можно прочитать не более 256 байт, но всегда возвращается столько байт, сколько запрошено и это не будет прерываться сигналами. Для буферов большего размера это не гарантируется. Например, если вызов прерывается обработчиком сигнала, то он может вернуть частично заполненный буфер или завершиться с ошибкой \fBEINTR\fP. .P Если источник \fIurandom\fP ещё не инициализирован, то вызов \fBgetrandom\fP() блокируется, если в \fIflags\fP не указано значение \fBGRND_NONBLOCK\fP. .P Аргумент \fIflags\fP является битовой маской, которая может содержать ноль или более следующих флагов: .TP \fBGRND_RANDOM\fP If this bit is set, then random bytes are drawn from the \fIrandom\fP source (i.e., the same source as the \fI/dev/random\fP device) instead of the \fIurandom\fP source. The \fIrandom\fP source is limited based on the entropy that can be obtained from environmental noise. If the number of available bytes in the \fIrandom\fP source is less than requested in \fIsize\fP, the call returns just the available random bytes. If no random bytes are available, the behavior depends on the presence of \fBGRND_NONBLOCK\fP in the \fIflags\fP argument. .TP \fBGRND_NONBLOCK\fP По умолчанию, при чтении из источника \fIrandom\fP вызов \fBgetrandom\fP() блокируется, если произвольные байты недоступны, и а при чтении из источника \fIurandom\fP блокируется, если ещё не инициализирован пул энтропии. Если указан флаг \fBGRND_NONBLOCK\fP, то в этих случаях \fBgetrandom\fP() не блокируется, а сразу возвращает \-1 и присваивает \fIerrno\fP значение \fBEAGAIN\fP. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, \fBgetrandom\fP() returns the number of bytes that were copied to the buffer \fIbuf\fP. This may be less than the number of bytes requested via \fIsize\fP if either \fBGRND_RANDOM\fP was specified in \fIflags\fP and insufficient entropy was present in the \fIrandom\fP source or the system call was interrupted by a signal. .P В случае ошибки возвращается \-1, а \fIerrno\fP устанавливается в значение ошибки. .SH ОШИБКИ .TP \fBEAGAIN\fP Запрошенное количество энтропии недоступно, и \fBgetrandom\fP() заблокировался бы, если бы отсутствовал флаг \fBGRND_NONBLOCK\fP. .TP \fBEFAULT\fP Адрес, указанный в \fIbuf\fP, лежит вне доступного адресного пространства. .TP \fBEINTR\fP Вызов был прерван обработчиком сигнала; смотрите описание о прерывании вызовов \fBread\fP(2) при работе с «медленными» устройствами и при отсутствии флага \fBSA_RESTART\fP в справочной странице \fBsignal\fP(7). .TP \fBEINVAL\fP В \fIflags\fP указан неверный флаг. .TP \fBENOSYS\fP Обёрточная функция в glibc для \fBgetrandom\fP() определила, что используемое ядро не поддерживает данный системный вызов. .SH СТАНДАРТЫ Linux. .SH ИСТОРИЯ Linux 3.17, glibc 2.25. .SH ПРИМЕЧАНИЯ Обзор и сравнение возможных интерфейсов, через которые можно получать случайные данные, смотрите в \fBrandom\fP(7). .P .\" В отличие от \fI/dev/random\fP и \fI/dev/urandom\fP, в вызове \fBgetrandom\fP() не используются пути или файловые дескрипторы. Таким образом, \fBgetrandom\fP() полезен в случаях, когда \fBchroot\fP(2) делает пути \fI/dev\fP невидимыми и приложение (например, служба во время загрузки) закрывает файловый дескриптор одного из этих файлов, которые были открыты библиотекой. .SS "Возвращается максимальное количество байтов" На момент Linux 3.19 существуют следующие ограничения: .IP \[bu] 3 When reading from the \fIurandom\fP source, a maximum of 32Mi\-1 bytes is returned by a single call to \fBgetrandom\fP() on systems where \fIint\fP has a size of 32 bits. .IP \[bu] При чтении из источника \fIrandom\fP возвращается максимум 512 байт. .SS "Прерывание обработчиком сигнала" При чтении из источника \fIurandom\fP (\fBGRND_RANDOM\fP не указан), \fBgetrandom\fP() блокируется до тех пор, пока не специализируется пул энтропии (если не указан флаг \fBGRND_NONBLOCK\fP). Если запрос требует большого количества байт (больше 256), \fBgetrandom\fP() будет заблокирован до тех пор, пока байты не будут сгенерированы и переданы из памяти ядра в \fIbuf\fP. При чтении из \fIrandom\fP (указан \fBGRND_RANDOM\fP), \fBgetrandom\fP() будет заблокирован до тех пор, пока какое\-то количество произвольных байт не станет доступно (если не указан флаг \fBGRND_NONBLOCK\fP). .P The behavior when a call to \fBgetrandom\fP() that is blocked while reading from the \fIurandom\fP source is interrupted by a signal handler depends on the initialization state of the entropy buffer and on the request size, \fIsize\fP. If the entropy is not yet initialized, then the call fails with the \fBEINTR\fP error. If the entropy pool has been initialized and the request size is large (\fIsize\fP\ >\ 256), the call either succeeds, returning a partially filled buffer, or fails with the error \fBEINTR\fP. If the entropy pool has been initialized and the request size is small (\fIsize\fP\ <=\ 256), then \fBgetrandom\fP() will not fail with \fBEINTR\fP. Instead, it will return all of the bytes that have been requested. .P При чтении из источника \fIrandom\fP блокирующие запросы на любой объём могут быть прерваны обработчиком сигналом (вызов завершается с ошибкой \fBEINTR\fP). .P Использование \fBgetrandom\fP() для чтения маленьких буферов (<=\ 256 байт) из источника \fIurandom\fP — предпочтительный способ использования. .P The special treatment of small values of \fIsize\fP was designed for compatibility with OpenBSD's \fBgetentropy\fP(3), which is nowadays supported by glibc. .P The user of \fBgetrandom\fP() \fImust\fP always check the return value, to determine whether either an error occurred or fewer bytes than requested were returned. In the case where \fBGRND_RANDOM\fP is not specified and \fIsize\fP is less than or equal to 256, a return of fewer bytes than requested should never happen, but the careful programmer will check for this anyway! .SH ОШИБКИ .\" FIXME patch proposed https://lkml.org/lkml/2014/11/29/16 В Linux 3.19 существуют следующие дефекты: .IP \[bu] 3 В зависимости от загруженности ЦП, \fBgetrandom\fP() не реагирует на прерывания, пока не прочитает все запрашиваемые байты. .SH "СМОТРИТЕ ТАКЖЕ" \fBgetentropy\fP(3), \fBrandom\fP(4), \fBurandom\fP(4), \fBrandom\fP(7), \fBsignal\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Azamat Hackimov , Dmitry Bolkhovskikh , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .