1. 程式人生 > >Linux 獲取隨機數

Linux 獲取隨機數

- 偽隨機法 

         偽隨機法就是通過一個確定性的演算法來獲取看似隨機或者亂序,在計算偽隨機序列時,如果使用的開始值不變化的,實際上獲取到的隨機序列的值順序是保持不變。例如在C中比較常用的隨機函式rand(),是比較典型的偽隨機法。

          在呼叫rand()函式時,沒有顯示的呼叫srand()函式來設定隨機序列開始種子的話,預設隨機序列的種子即為1,此時的隨機序列為:1804289383

846930886、1681692777、1714636915、1957747793、424238335、719885386、1649760492。

          rand()函式是實現在glibc庫中,運行於使用者態,執行效率比較高效;

-  真隨機法 

     真隨機法,在在計算機環境中,主要是依賴於計算機環境中的背景操作,例如來自驅動程式或者其他來源的背景噪聲。真隨即法具有不可預測和再現性,原因在於產生隨機數的作業系統所處的環境充滿了未知性。在Linux中,/dev/random產生的是真正的隨機數序列。

     隨機函式發生器通過驅動程式或者其他來源來獲取環境噪聲來計算出一個隨機數,同時將產生的隨機數放入到隨機數池中,每次需要隨機數時,從池中獲取一個數據數即可,如果隨機池已空,從/dev/random讀取資料時,將會被阻塞,直到新的隨機數被放入到池中才會返回,這個地方無疑是個巨大的坑,當面對大量的請求需要隨機數時。

     /dev/unrandom,也是從隨機池中獲取一個隨機數,與/dev/random的區別點在於隨機池為空時,隨機數的程度不夠高。

    呼叫/dev/(u)random獲取隨機數的方法,相比rand()方法效率會低很多,每獲取一次random值,均需要發起一次系統呼叫,來呼叫該值。

    示例程式碼為:

    FILE *fs_p = NULL; 

    fs_p = fopen ("/dev/urandom", "r");

         fread(&seed, sizeof(int), 1, fs_p);  //obtain oneunsigned int data  
          fclose(fs_p);
          

        針對這段程式碼計算分析,會大量大量的計算效能消耗於核心態:        

相關推薦

Linux 獲取隨機數

- 偽隨機法           偽隨機法就是通過一個確定性的演算法來獲取看似隨機或者亂序,在計算偽隨機序列時,如果使用的開始值不變化的,實際上獲取到的隨機序列的值順序是保持不變。例如在C中比較常用的隨機函式rand(),是比較典型的偽隨機法。           在呼叫rand()函式時,沒有顯示的呼叫

linux 獲取隨機數函式

--------------------y.cpp--------------------- /*  * y.cpp  *  *  Created on: 2013-12-15  *      Aut

linux 獲取隨機數的辦法

oss 結果 定位 博文 截取 分享圖片 ebe 51cto 交互式 對於剛學linux的我,盡力去弄清楚每一個點,記錄收藏每個好的博文。摘自:https://blog.csdn.net/yuki5233/article/details/82997001#openssl_4

Linux獲取隨機數(隨機碼)的6種方法

第一種:藉助環境變數$RANDOM [[email protected] ~]# echo $RANDOM 14535 ##說明:linux系統下的環境變數$RANDOM的取值範圍是:0–32767 。 1. 產生0-25範圍內的數,用這個環境變

PHP獲取隨機數的函數rand()和mt_rand()

max min target targe () 不定 效率 獲取 php rand()函數用戶獲取隨機數,具體用法如下: rand()可以設置0個參數或者兩個參數,如rand($min,$max),$min表示從XX開始取值,$max表示最大只能為XX 例如: &

linux獲取日誌指定行數範圍內的內容

得到 http rep 不想 code 水流 clas -a 技術分享 假如我要獲取“淺淺歲月拂滿愛人袖”到“落入凡塵傷情著我”之間的內容。 1、首先得到他們所在的行號: -n選項顯示行號 但是有時候grep後顯示的是“匹配到二進制文件(標準輸入)”,說明搜索的字

linux 獲取本機MAC/IP地址的方法

linunx 編程 mac 地址功能:查詢本機IP/MAC地址,過濾掉127.0.0.1 loop-back 地址適用:linux, ubuntu 16.04 調試通過#include <stdlib.h>#include <stdio.h>#include <unistd.h&

C#獲取隨機數

stat min .get converter bytes pro 計算機 生成器 指定 C#獲取隨機數最常用的就是直接用new Random().Next(min,max),但這種方法存在一個問題,就是當計算機運算速度足夠快的時候,系統來不及計算下一個隨機數,最終可能產生

SylixOS下獲取隨機數方法

sylixos 隨機數1. 概述 隨機數是專門的隨機試驗的結果,數學上產生的隨機數被稱為“偽隨機數”,真正的隨機數是由物理方法產生的。隨機數的產生是由算術規則產生,由於隨機數種子的不同,最終生成的隨機數也不相同。如果隨機數種子相同,則生成的隨機數也是相同的,因此要產生隨機數,隨機數種子必須是隨機的。

linux獲取文件全路徑的方法

linux 獲取文件 全路徑 獲取路徑的各種相關方法:獲取文件名:basename /home/cuizhiliang344/note.txtnote.txt獲取目錄:dirname /home/cuizhiliang344/note.txt/home/cuizhiliang344通過一個文件獲取

Python random模塊(獲取隨機數

class 範圍 php bob 參數 strong amp code nbsp 1、random.random  隨機生成一個0到1的隨機浮點數: 0 <= n < 1.0 In [2]: print random.random() 0.5448240169

Linux獲取命令的方法

linux獲取幫助1.man:針對於外部命令的幫助手冊 man九章: 1.用戶命令(所有用戶都可以執行的命令) 2.系統調用 3.C庫調用 4.設備和特殊文件 5.配置文件格式 6.遊戲相關的幫助信息 7.雜項 8.系統管理類命令 9.與內核相關的幫助 在每個man手冊

linux 獲取時間後--自定義時間格式

1-1 ftime ble 時間格式 功能 時區 放置 日期和時間 保存 自定義時間格式我們可以使用strftime()函數將時間格式化為我們想要的格式。它的原型如下:size_t strftime(&nbsp; char *strDest,&nbsp; s

Linux獲取httpd線程的總內存

httpd pri 獲取 var lee div seconds while awk #/bin/bash echo ‘‘>httpd.txt SECONDS=0 while [ $SECONDS -le 1800 ] do sleep 2 varme

linux獲取jmeter PID並且kill與啟動

ash pidof too awk 區別 執行 自身 通過 sleep Linux 的交互式 Shell 與 Shell 腳本存在一定的差異,主要是由於後者存在一個獨立的運行進程,因此在獲取進程 pid 上二者也有所區別。 交互式 Bash Shell 獲取進程 pid

linux獲取系統啟動時間

pre 現在 red str family nds stderr 表達方式 space 1、前言   時間對操作系統來說非常重要,從內核級到應用層,時間的表達方式及精度各部相同。linux內核裏面用一個名為jiffes的常量來計算時間戳。應用層有time、getdayti

Linux自學筆記(4):Linux獲取幫助的命令詳解

Linux獲取幫助的命令詳解 man linux命令幫助的獲取 外部命令:都有一個可執行程序,位於文件系統都目錄下; echo (COMMAND) 內部命令: help COMMAND 外部命令幫助:(1)幫助手冊 COMMAND --help # COMMAND -

Linux 獲取 MAC 地址並去除 : 字符

字符 去除 linu span onf ifconf mac eth grep ifconfig -a | grep eth0 | awk -F ' ' '{print $5}' | sed 's/://g'Linux

敘述linux獲取幫組信息的渠道及使用場景和方法。 獲取源碼包怎樣獲得幫助

openstac 進制 ... readme 命令 man .... txt ins man 相關文檔打包在rpm包裏面,或者綠色軟件/源碼包 大部分軟件都包含有man手冊openstack --help 一般在二進制文件-hhelp 內

java通過Linux獲取命令信息並顯示出來

用戶 com username rac blog RoCE host end jsch 代碼如下: package test; import java.io.*; import java.nio.charset.Charset; import java.util.Prop