Программа на языке Cи с функцией API Unix/Linux
Задание: Генерация настоящих случайных чисел
путем замера интервалов между нажатиями клавиш пользователем.
Изучить методы генерации не воспроизводимых несмещенных
(к нулю или к единице) последовательностей случайных чисел,
а также методы оценки качества получаемой последовательности.
Ограничение: генерировать на каждое нажатие не более одного
случайного бита.
Сохранять результат в виде в последовательности случайных
байтов в файл.
Hints:
Для переключения терминала UNIX в режим по-символьного ввода
и отключенного эха (и обратно) можно воспользоваться следующей функцией:
#include
#include
#include
void set_icanon(int icanon)
{
struct termios oldt, newt;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
if (icanon)
newt.c_lflag |= (ICANON | ECHO);
else
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
}
Для получения системного времени UNIX с долями секунд:
#include
#include
double get_time(void)
{
struct timeval tv;
struct timezone tz;
gettimeofday(&tv, &tz);
return tv.tv_sec + tv.tv_usec / 1000000.0;
}