可能会尝试这样的事情: 我已经使用过很多次了,似乎工作得很好。
void SeedRandomNumGenerator()
{
unsigned int seed;
int fd;
fd = open("/dev/urandom", O_RDONLY);
if(fd)
{
read(fd, &seed, sizeof(seed));
close(fd);
srandom(seed);
}
}
/*
return a proper random number that uses the uniform distribution
of numbers returned by random() -- this is far better than
simply doing random() % limit
According to calculations, random() will at most be called twice
and usually only once per call to random_lim()
returns int between 0 and limit
so if you want a random number between 1-10 inclusive the call would
look like this: random_lim(9)+1
*/
int random_lim(int limit)
{
int divisor = RAND_MAX/(limit+1);
int retval;
do
{
retval = random()/divisor;
}while (retval > limit);
return(retval);
}
编辑:如果你想摆脱调用随机()这个link提供了一个实现随机()的行为与随机的()。
我想答案取决于rand()在你的系统上返回的范围。你会比我们更了解......(如果你想告诉我们,这是RAND_MAX)。 – indiv 2014-09-01 22:14:34
您是否在安全相关的应用程序中使用它,如果rand函数(不一定是线性同余算法,但几乎肯定不是密码安全的)很容易被破坏? – 2014-09-01 23:15:51
在您购买符合您要求的实施之前,您需要确定您的要求。 – 2014-09-01 23:32:53