Hallo,
Am Fri, 08 Oct 2004, Jan Trippler schrieb:
Am Donnerstag, 7. Oktober 2004 20:00 schrieb Daniel Lord:
[..]
/* Initialise random number generator */
srand (time (0)); /* init random */
/* Initialise random number generator */
srand (time (0));
Ihr wisst, dass ihr damit innerhalb einer Sekunde immer die gleiche
Sig bekommt?
$ cat testrand.c
#include
#include
#include
int main(void) {
srand(time(0));
printf("%i\n", rand());
return 0;
}
$ for i in `seq 1 20`; do ./testrand; done | xargs echo
1221046849 1221046849 1221046849 1221046849 1221046849 1221046849
1221046849 1221046849 1221046849 1221046849 1221046849 1221046849
1221046849 1221046849 1221046849 1221046849 1221046849 1221046849
1221046849 1221046849
Ok, bei sigs ist das wohl nicht so schlimm ;)
Generell waere es besser, z.B. mit vier Bytes aus /dev/urandom zu
initialisieren:
$ cat testrandom.c
#include
#include
#include
#include
#include
int main(void) {
unsigned int buf; int status;
int rfd = open("/dev/urandom", O_RDONLY);
if(rfd == -1) { perror(""); exit(errno); }
status = read(rfd, &buf, sizeof(rfd));
if( status == -1 ) { perror(""); close(rfd); exit(errno); }
if( status != sizeof(rfd) ) {
fprintf(stderr, "Short read from '/dev/urandom'\n");
close(rfd); exit(1);
}
close(rfd);
srand(buf);
printf("%i\n", rand());
return 0;
}
$ for i in `seq 1 20`; do ./testrandom; done | xargs echo
1299190557 1105359629 220752029 875495339 669987401 1905838056
365854229 2033552149 2131803422 896329060 624761677 601783920
1647678471 2054001691 1878575586 243884269 480209534 1163767311
1353496780 945441630
-dnh
--
100: Hacker
Zwanghafte Programmierer, die nur für das Programm leben und
deshalb auf ihre Körperpflege verzichten. (Joseph Weizenbaum,
"Die Macht der Computer und die Ohnmacht der Vernunft")