Other Alias
srandom_r, initstate_r, setstate_rОБЗОР
#include <stdlib.h>
int random_r(struct random_data *buf, int32_t *result);
int srandom_r(unsigned int seed, struct random_data *buf);
int initstate_r(unsigned int seed, char *statebuf,
size_t statelen, struct random_data *buf);
int setstate_r(char *statebuf, struct random_data *buf);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
random_r(), srandom_r(), initstate_r(), setstate_r():
- _SVID_SOURCE || _BSD_SOURCE
ОПИСАНИЕ
Эти функции являются реентрабельными эквивалентами функций, которые описаны в random(3). Они подходят для использования в многонитивых программах, где каждой нити необходимо получить независимую, воспроизводимую последовательность случайных чисел.Функция random_r() подобна random(3), но вместо использования информации о состоянии, хранящейся в глобальный переменной, в ней используется информация о состоянии в аргументе, указанном в buf, который должен быть проинициализирован ранее с помощью initstate_r(). Сгенерированное случайное число возвращается в аргументе result.
Функция srandom_r() подобна srandom(3), но инициализирует семя для генератора случайных чисел, чьё состояние хранится в объекте, на который указывает buf который должен быть проинициализирован ранее с помощью initstate_r(), а не связывает семя с глобальной переменной состояния.
Функция initstate_r() подобна initstate(3), но инициализирует состояние в объекте, на который указывает buf, а не в глобальной переменной состояния.
Функция setstate_r() подобна setstate(3), но изменяет состояние в объекте, на который указывает buf, а не в глобальной переменной состояния.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении все функции возвращают 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.ОШИБКИ
- EINVAL
- Функции initstate_r() передан массив состояния меньше 8 байт.
- EINVAL
- Аргумент statebuf или buf функции setstate_r() равнялся NULL.
- EINVAL
- Аргумент buf или result функции random_r() равнялся NULL.
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).Интерфейс | Атрибут | Значение |
random_r(),
srandom_r(),
initstate_r(), setstate_r() | безвредность в нитях | безвредно (MT-Safe race:buf) |