Модератор: Модераторы разделов
BratSinot
Сообщения: 812
ОС: Slackware64
Сообщение
BratSinot » 15.07.2010 13:34
Здравствуйте!
Я использую /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
Сообщение
serzh-z » 15.07.2010 13:41
BratSinot писал(а): ↑ 15.07.2010 13:34
Почему он то быстро выдает значение, то медленно?
Когда в ядре опустошается пул энтропии, то операция чтения /dev/random блокируется на ожидании. Пул энтропии заполняется различными подсистемами ядра, после перемещения курсора мыши, нажатий на клавиши и т.д.
/dev/urandom может решить проблему нехватки данных в пуле энтропии - он просто заполнит буфер возврата псевдослучайными данными.
BratSinot
Сообщения: 812
ОС: Slackware64
Сообщение
BratSinot » 15.07.2010 15:02
serzh-z писал(а): ↑ 15.07.2010 13:41
BratSinot писал(а): ↑ 15.07.2010 13:34
Почему он то быстро выдает значение, то медленно?
/dev/urandom может решить проблему нехватки данных в пуле энтропии - он просто заполнит буфер возврата псевдослучайными данными.
Хм, я urandom пробовал и работали они одинаково. Впрочем не сложно будет еще раз попробовать.
Кстати, а как реализован rand() в GCC в GNU/Linux?
P.S. Просто сейчас лень копаться в исходных кодах GCC.
Не, urandom быстрее получился. Значит мне показалось.