Случайные числа (/dev/random && /dev/urandom)

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

Случайные числа

Сообщение BratSinot »

Здравствуйте!

Я использую /dev/random(или urandom). Почему он то быстро выдает значение, то медленно?

Код: Выделить всё

 if(!(rand_fs=fopen("/dev/random", "r")))
 {
  fprintf(stderr, "Cannot open /dev/random\n");
  exit(1);
 }
 int rndi;
 fread(&rndi, 1, sizeof(int), rand_fs);
 fclose(rand_fs);


P.S. Про rand() можно не упоминать.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Случайные числа

Сообщение serzh-z »

BratSinot писал(а):
15.07.2010 13:34
Почему он то быстро выдает значение, то медленно?
Когда в ядре опустошается пул энтропии, то операция чтения /dev/random блокируется на ожидании. Пул энтропии заполняется различными подсистемами ядра, после перемещения курсора мыши, нажатий на клавиши и т.д.

/dev/urandom может решить проблему нехватки данных в пуле энтропии - он просто заполнит буфер возврата псевдослучайными данными.
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: Случайные числа

Сообщение BratSinot »

serzh-z писал(а):
15.07.2010 13:41
BratSinot писал(а):
15.07.2010 13:34
Почему он то быстро выдает значение, то медленно?
/dev/urandom может решить проблему нехватки данных в пуле энтропии - он просто заполнит буфер возврата псевдослучайными данными.

Хм, я urandom пробовал и работали они одинаково. Впрочем не сложно будет еще раз попробовать.

Кстати, а как реализован rand() в GCC в GNU/Linux?
P.S. Просто сейчас лень копаться в исходных кодах GCC.

Не, urandom быстрее получился. Значит мне показалось.
Спасибо сказали: