Я написал это ранее сегодня.Компилируется как в C, так и в C ++ с использованием GNU-компилятора в Linux.
#include "rands.h"
#include <sys/types.h> /* for open(2) */
#include <sys/stat.h> /* for open(2) */
#include <fcntl.h> /* for open(2) */
#include <unistd.h> /* for read(2), close(2) */
#define DEVURANDOM "/dev/urandom"
typedef uint8_t TYPE;
TYPE getRandU8()
{
TYPE rnum = 0;
int fd = open(DEVURANDOM, O_RDONLY);
if (fd != -1)
{
(void) read(fd, (void *)&rnum, sizeof(TYPE));
(void) close(fd);
}
return rnum;
}
Вы можете изменить TYPE на int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t и int64_t по мере необходимости (и изменить имяфункционировать соответственно).Вы также можете использовать (подписанный / неподписанный) char, short, int, long, long long и т. Д. Файл rands.h (в том же каталоге) содержит только прототипы функций для связи.