00001 #include <stdio.h> 00002 #include <stdlib.h> 00003 #include <sys/time.h> 00004 #include "Random.h" 00005 00009 Random::Random(void) 00010 { 00011 reset(); 00012 } 00013 00017 Random::Random(unsigned int seed) 00018 { 00019 srandom(seed); 00020 } 00021 00022 void 00023 Random::reset(void) 00024 { 00025 FILE *fp; 00026 unsigned int seed; 00027 struct timeval tv; 00028 00029 fp = fopen("/dev/urandom", "r"); 00030 if (!fp) fp = fopen("/dev/random", "r"); 00031 00032 if (fp) { 00033 int res = fread(&seed, sizeof(unsigned int), 1, fp); 00034 if (res != sizeof(unsigned int)) { 00035 fclose(fp); 00036 fp = NULL; 00037 } 00038 } 00039 00040 if (!fp) { 00041 gettimeofday(&tv, NULL); 00042 seed = (tv.tv_sec ^ tv.tv_usec); 00043 } else { 00044 fclose(fp); 00045 } 00046 00047 srandom(seed); 00048 } 00049 00050 int 00051 Random::getData(void) 00052 { 00053 return random(); 00054 }