[Lugge] Re: R: Re: R: Re: R: generare numeri casuali in c usando /dev/random o /dev/urandom

  • From: Antonio Cuni <anto.cuni@xxxxxxxxx>
  • To: lugge@xxxxxxxxxxxxx
  • Date: Sat, 5 Feb 2005 11:46:20 +0000

Alle Friday 04 February 2005 22:50, gianlu]{a ha scritto:
> int key(){
>          int randnum,key;
>          int fd = open("/dev/urandom", O_RDONLY);
>          if (fd != -1) {
>             read(fd,&randnum,1);  /*non mi ricordo bene la funzione ma se
> ci ho preso così leggo un byte da /dev/urandom e quindi ho una sequenza di
> 8 bit che ti da un numero da 0 a 255*/
>             key = randnum;
>          }
>          close(fd);
>          return key;
> }
>
> Vuoi migliorarla ?
>
>
> int key(){
>          int randnum,key;
>          int fd = open("/dev/urandom", O_RDONLY);
>          if (fd != -1) {
>             read(fd,&randnum,4);  /*leggi una word da /dev/urandom e quindi
> ho una sequenza di 32 bit */
>             key = randnum % 255;  /*genero chiavi nell'insieme 0-255 che se
> ho capito bene è quello che vuoi tu*/
>          }
>          close(fd);
>          return key;
> }

Tre osservazioni: la prima e` che se fai randnum % 255 ottieni un numero 
compreso tra 0 e *254*...
La seconda e` che non credo che questa versione sia migliore di quella 
precedente: nella prima leggi un byte da /dev/urandom e lo resituisci; nella 
seconda leggi 4 byte da /dev/urandom, scarti i primi tre e restituisci il 
quarto: non credo ci sia questa grossa differenza...

Terza e ultima osservazione: il codice non e` portabile, dato che non possiamo 
essere sicuri che su ogni piattaforma un int occupi sempre 4 byte; sarebbe 
meglio scrivere read(fd, &randnum, sizeof(randnum)).

ciao Anto
========----------

 Archivio delle e-mail postate in lista
 http://www.freelists.org/archives/lugge/

 Prima di scrivere in m-list per favore leggi il regolamento
 http://www.lugge.net/index.php?mod=cosa_facciamo/gruppo_di_discussione

 Modifica dell'account sulla lista LUGGe
 http://www.lugge.net/index.php?mod=cosa_facciamo/gruppo_di_discussione#list



Other related posts: