SylixOSでの乱数取得方法
1.概要
乱数は専門的なランダム試験の結果であり,数学的に生成された乱数は「擬似乱数」と呼ばれ,真の乱数は物理的手法によって生成される.乱数の生成は算術規則によって生成され,乱数シードによって最終的に生成される乱数も異なる.乱数シードが同じ場合、生成される乱数も同じであるため、乱数シードを生成するには、乱数シードがランダムである必要があります.
プログラミングの過程で、コードによって乱数を生成する必要がある場合があり、SylixOSは乱数を生成する関数と乱数デバイスを提供しています.
2.関数の説明
SylixOSは、乱数を取得するシード関数srandを提供し、rand関数は乱数を生成する.
srand関数は乱数シードを設定するために使用され、関数は以下のとおりです.
srand関数プロトタイプ分析: パラメータuiSeedは乱数シードを表し、通常生成される乱数シードはランダムである.
rand関数は乱数を生成するために使用され、生成された乱数は「0-RAND_MAX」の間であり、SylixOSは現在RAND_を定義しているMAX値は2147483647で、関数は以下のとおりです.
rand関数プロトタイプ分析: 関数は、乱数シードに基づいて乱数を生成します.
3.乱数の取得
乱数の生成は乱数シードに関連しており、通常、乱数を取得するには、現在の時間で乱数デバイスを取得および読み出して取得することができる.
3.1システム時間による乱数取得
time関数により現在のシステム時間を取得し,現在のシステム時間により乱数シードを生成する.システム時間は絶えず変化するため,毎回ランダムシードが異なることを保証した.
サンプルコードは、プログラムリスト3-1に示す.
プログラムリスト3-1システム時間による乱数取得
乱数は専門的なランダム試験の結果であり,数学的に生成された乱数は「擬似乱数」と呼ばれ,真の乱数は物理的手法によって生成される.乱数の生成は算術規則によって生成され,乱数シードによって最終的に生成される乱数も異なる.乱数シードが同じ場合、生成される乱数も同じであるため、乱数シードを生成するには、乱数シードがランダムである必要があります.
プログラミングの過程で、コードによって乱数を生成する必要がある場合があり、SylixOSは乱数を生成する関数と乱数デバイスを提供しています.
2.関数の説明
SylixOSは、乱数を取得するシード関数srandを提供し、rand関数は乱数を生成する.
srand関数は乱数シードを設定するために使用され、関数は以下のとおりです.
#include
VOID srand (uint_t uiSeed);
srand関数プロトタイプ分析:
rand関数は乱数を生成するために使用され、生成された乱数は「0-RAND_MAX」の間であり、SylixOSは現在RAND_を定義しているMAX値は2147483647で、関数は以下のとおりです.
#include
INT rand(VOID);
rand関数プロトタイプ分析:
3.乱数の取得
乱数の生成は乱数シードに関連しており、通常、乱数を取得するには、現在の時間で乱数デバイスを取得および読み出して取得することができる.
3.1システム時間による乱数取得
time関数により現在のシステム時間を取得し,現在のシステム時間により乱数シードを生成する.システム時間は絶えず変化するため,毎回ランダムシードが異なることを保証した.
サンプルコードは、プログラムリスト3-1に示す.
プログラムリスト3-1システム時間による乱数取得
#include
#include
#include
int main (int argc, char **argv)
{
int i = 0;
srand((unsigned int)time(NULL)); /* */
for (i = 0; i
3-1 , :
[root@sylixos:/root]# /apps/test_rand/test_rand
random : 65
random : 26
random : 84
random : 56
random : 56
random : 92
random : 82
random : 35
random : 83
random : 36
[root@sylixos:/root]# /apps/test_rand/test_rand
random : 89
random : 81
random : 90
random : 20
random : 16
random : 51
random : 23
random : 47
random : 94
random : 5
プログラムを2 し、 から2 の が なることがわかる.
3.2 デバイス
コンピュータ は なシステムであるため,コンピュータアルゴリズムでは の を することは である.しかし, の には,ハードウェア が した ,ユーザがマウスをクリックした など, なノイズが しており, に できなかった.
SylixOSカーネルで された は,システム のこれらのランダムノイズを して の シーケンスを する.SylixOSの は、「/dev/urandom」と「/dev/random」の2つの なファイルから できます.それらが を する は, のシステムのエントロピープールを いて のランダムビットを し,これらのビットをバイトストリームとして すことである.
エントロピープールは のシステムの であり、エントロピーはシステムの の を し、システム はメモリの 、ファイルの 、 なるタイプのプロセス など、 くのパラメータで することができる. の ノイズの が しくない 、または の ノイズが さい 、 えば を れたばかりの 、 のランダムビットが である 、 したランダム のランダム は に る.
「/dev/urandom」ファイルと「/dev/random」ファイルの いは、 が しい を できない にプログラムをブロックし、 は(ublock)しないが、 した の は によくなく、 のようなアプリケーションにとって い ではないことである.
SylixOSは、 3-1に すように、「/dev/urandom」と「/dev/random」の2 のランダムデバイスを する.
3-1 デバイス
この を いて を し、 なコードをプログラムリスト3−2に す.
プログラムリスト3-2 デバイスによる #include
#include
int main(int argc, char **argv)
{
int iFd;
unsigned int uiSeed;
iFd = open("/dev/urandom", O_RDWR); /* */
if (iFd
3-2 , :
[root@sylixos:/root]# /apps/test_rand/test_rand
random : 993515266
[root@sylixos:/root]# /apps/test_rand/test_rand
random : 221898156
[root@sylixos:/root]# /apps/test_rand/test_rand
random : 1087964684
[root@sylixos:/root]# /apps/test_rand/test_rand
random : 816671734
[root@sylixos:/root]# /apps/test_rand/test_rand
random : 2027404039
[root@sylixos:/root]# /apps/test_rand/test_rand
サンプルプログラムを5 し, から する が なることが かる.
4.
『SylixOSアプリケーション マニュアル』