Problem je v tem, da ti funkcija open() vedno vrne -1, ker jo narobe
uporabljas. Drugi argument (flag) mora biti tipa integer. Tako da v
bistvu oba programa delujeta narobe (nakljucno stevilo, ki ga dobis, je
posledica nedefinirane vrednosti spremenljivke rnb ob deklaraciji).
Pravilno bi bilo takole:

#include <stdio.h>
#include <math.h>
#include <limits.h>
#include <fcntl.h>

double krneki(){
   int rnb,fd;
   double tmp;
   fd = open("/dev/random", O_RDONLY);
   read(fd,&rnb,4);
   close(fd);
   tmp = abs(rnb)/(double)INT_MAX;
   printf("%f\n",tmp);
   return tmp;
}

main (){
   printf("%f\n",krneki());
}


Lep pozdrav, Ziga



Miha Strohsack wrote:
> 
> Živ!
> Malo se igram z naključnimi števili in sem naletel na en meni nejasen problem.
> Najprej dva programčka:
> 
> #include <stdio.h>
> #include <math.h>
> #include <limits.h>
> 
> double krneki(){
>    int rnb,fd;
>    double tmp;
>    fd = open("/dev/random","r");
>    read(fd,&rnb,4);
>    close(fd);
>    tmp = abs(rnb)/(double)INT_MAX;
>    printf("%f\n",tmp);
>    return tmp;
> }
> 
> main (){
>    printf("%f\n",krneki());
> }
> 
> in še drugi:
> 
> #include <stdio.h>
> #include <math.h>
> #include <limits.h>
> 
> main(){
>    int rnb,fd;
>    double tmp;
>    fd = open("/dev/random","r");
>    read(fd,&rnb,4);
>    close(fd);
>    tmp = abs(rnb)/(double)INT_MAX;
>    printf("%f\n",tmp);
> }
> 
> Drugi program dela brez problemov (izpiše naključno realno število), prvi pa
> tudi izpiše realno število (2X), ampak je problem v tem, da je to število
> vedno enako (tudi če ga zaženem velikokrat z večjimi časovnimi presledki).
> Kje je catch?
> 
> bye
> ------------------------------------------------
> Miha Strohsack
> http://members.tripod.com/~strozi
> finger [EMAIL PROTECTED]
> for public PGP 5 key
> ------------------------------------------------

Reply via email to