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