获取系统信息2——linux中使用随机数
生活随笔
收集整理的這篇文章主要介紹了
获取系统信息2——linux中使用随机数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
以下內(nèi)容源于朱有鵬《物聯(lián)網(wǎng)大講堂》課程的學(xué)習(xí)整理,如有侵權(quán),請告知刪除。
1、隨機數(shù)和偽隨機數(shù)
- 隨機數(shù)是隨機出現(xiàn),沒有任何規(guī)律的一組數(shù)列。
- 真正的完全隨機的數(shù)列是不存在的,只是一種理想情況。
- 一般只能通過一些算法得到一個偽隨機數(shù)序列。
- 平時說到隨機數(shù),基本都指的是偽隨機數(shù)。
2、linux中隨機數(shù)相關(guān)API
- 連續(xù)多次調(diào)用rand函數(shù)可以返回一個偽隨機數(shù)序列;
- srand函數(shù)用來設(shè)置rand獲取的偽隨機序列的種子。
3、實戰(zhàn)演示
#include <stdio.h> #include <stdlib.h>int main(int argc, char **argv) {int i = 0, val = 0;/* if (argc != 2){printf("usage: %s num\n", argv[0]);return -1;} */ printf("RAND_MAX = %d.\n", RAND_MAX); // 2147483647//srand(atoi(argv[1]));srand(time(NULL));for (i=0; i<6; i++){val = rand();printf("%d ", (val % 6));}printf("\n");return 0; }- 單純使用rand重復(fù)調(diào)用n次,就會得到一個0-RAND_MAX之間的偽隨機數(shù),如果需要調(diào)整范圍,可以得到隨機數(shù)序列后再進行計算。
- 單純使用rand來得到偽隨機數(shù)序列有缺陷,每次執(zhí)行程序得到的偽隨機序列是同一個序列,沒法得到其他序列;
- rand內(nèi)部的算法是通過一個種子(seed,其實就是一個原始參數(shù),int類型),rand內(nèi)部默認(rèn)是使用1作為seed的,種子一定的算法也是一定的,那么每次得到的偽隨機序列肯定是同一個。
- 要想每次執(zhí)行這個程序獲取的偽隨機序列不同,則每次都要給不同的種子。用srand函數(shù)來設(shè)置種子。
4、總結(jié)和說明
- 在每次執(zhí)行程序時,先用srand設(shè)置一個不同的種子,然后再多次調(diào)用rand獲取一個偽隨機序列,這樣就可以每次都得到一個不同的偽隨機序列。
- 一般常規(guī)做法是用time函數(shù)的返回值來做srand的參數(shù)。
5、在linux系統(tǒng)中獲取真正的隨機數(shù)
- linux系統(tǒng)收集系統(tǒng)中的一些隨機發(fā)生的事件的時間(譬如有人動鼠標(biāo),譬如觸摸屏的操作和坐標(biāo)等)作為隨機種子去生成隨機數(shù)序列。
總結(jié)
以上是生活随笔為你收集整理的获取系统信息2——linux中使用随机数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件需求说明书/ 概要设计说明书/项目开
- 下一篇: 细粒度权限控制 linux,利用dock