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

  • From: "gianlu]{a" <theblackangel@xxxxxxxx>
  • To: <lugge@xxxxxxxxxxxxx>
  • Date: Sat, 5 Feb 2005 14:11:31 +0100

 

>Tre osservazioni: la prima e` che se fai randnum % 255 ottieni un numero
compreso tra 0 e *254*...

Pignolo....erano le due di notte! :D

>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...

Invece io temo prorio di si...a parte che non volevo usare int ma unsigned
int la prima funzione è *errata* o meglio torna risultati non voluti!
Provala e capirai. Nella seconda cmq non scarto i primi tre ma uso la
matematica dei moduli.
Allego un file c.

>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)).

Nein, la tua soluzione è sicuramente più elegante, tuttavia Ansi C definisce
int come word del processore, quindi su piattaforma a 32 bit tale codice è
portabile.
Se poi tu avevi in mente tutte le piattaforme, anche le 64 e quelle a 16 bit
allora ok. ;)

G


-- 
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 265.8.5 - Release Date: 03/02/2005
 
  



 --
 Email.it, the professional e-mail, gratis per te: http://www.email.it/f

 Sponsor:
 Email.it Phone Card: chiami in tutto il mondo a tariffe imbattibili da tutti i 
telefoni fissi e cellulari! Clicca e scopri come
 Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid&86&d=5-2
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

int key1(){
          unsigned 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;
 }

int key2(){
          unsigned int randnum,key;
          int fd = open("/dev/urandom", O_RDONLY);
          if (fd != -1) {
             read(fd,&randnum,4);  /*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;
 }

int key3(){
         unsigned 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 ;  /*genero chiavi nell'insieme 0-255 che se ho 
capito bene è quello che vuoi tu*/
         }
         close(fd);
         return key % 256;
}

int key(){
         unsigned 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 % 256;  /*genero chiavi nell'insieme 0-255 che se ho 
capito bene è quello che vuoi tu*/
         }
         close(fd);
         return key;
}
int main(){
printf ("La kiave è : %u \n", key());
printf ("La kiave 1 è : %u \n", key1());
printf ("La kiave 2 è : %u \n", key2());
printf ("La kiave 3 è : %d \n", key3());
}
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 265.8.5 - Release Date: 03/02/2005

========----------

 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:

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