linux随机数

1. 随机数和伪随机数
(1)随机数是真正随机的,无规律的,而伪随机数是有规律的,可能重复的。
(2)用算法得到的随机数都是伪随机数,只不过重复的概率非常低。

2. linux伪随机数相关API或库函数
2.1.rand()

int rand(void);
int rand_r(unsigned int *seedp);
(1)rand()需要一个seed,seed确定后,rand()将按照算法从[0-RAND_MAX]中确定一个序列流,每次同一进程每次调用rand()就返回序列流中的一个数。
(2)seed默认值是 1。
(3)由于seed固定,序列流就固定,所以要得到不同的序列流需要每次运行进程时给不同的seed,一般使用time(),但是time()做seed的缺点是程序重复执行的时间间隔必须大于1秒,否则time()返回的相同的值。
(4)直接调用rand()返回的是一个很大的数,可以通过取余获得小的数。

2.2.srand()
void srand(unsigned int seed);
(1)用于设置rand()的seed。
   
3. linux实现真随机数
(1)大致思路是用事件做种子,比如用户移动鼠标,按键盘,这些随机的事件做种子来生成真随机数。

猜你喜欢

转载自blog.csdn.net/blank2019/article/details/79550841