Manpages

名 前

random_r, srandom_r, initstate_r, setstate_r − リ エ ン ト ラ ン ト な 乱 数 生 成 器

書 式

#include <stdlib.h>

int random_r(struct random_data *buf, int32_t *result);

int srandom_r(unsigned int seed, struct random_data *buf);

int initstate_r(unsigned int seed, char *statebuf,
size_t
statelen, struct random_data *buf);
int setstate_r(char *
statebuf, struct random_data *buf);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

random_r(), srandom_r(), initstate_r(), setstate_r():

_SVID_SOURCE || _BSD_SOURCE

説 明

こ れ ら の 関 数 は 、 random(3) で 説 明 さ れ て い る 関 数 の リ エ ン ト ラ ン ト 版 で 、 等 価 な 機 能 を 持 つ 。 こ れ ら は 、 独 立 し た 再 現 可 能 な 乱 数 列 を 各 ス レ ッ ド が 得 る 必 要 が あ る よ う な マ ル チ ス レ ッ ド プ ロ グ ラ ム で の 使 用 に 適 し て い る 。

random_r() 関 数 は random(3) と 同 様 だ が 、 大 域 変 数 (global variable) で 管 理 さ れ る 状 態 情 報 を 使 う の で は な く 、 buf が 指 す 引 き 数 に 格 納 さ れ た 状 態 情 報 を 使 う 。 生 成 さ れ た 乱 数 は 引 き 数 result に 格 納 さ れ て 返 さ れ る 。

srandom_r() 関 数 は srandom(3) と 同 様 だ が 、 大 域 変 数 で 管 理 さ れ る 状 態 に 対 応 す る 乱 数 生 成 器 の 種 で は な く 、 buf が 指 す オ ブ ジ ェ ク ト で 管 理 さ れ る 状 態 に 対 応 す る 乱 数 生 成 器 の 種 を 初 期 化 す る 。

initstate_r() 関 数 は initstate(3) と 同 様 だ が 、 大 域 変 数 で 管 理 さ れ る 状 態 を 初 期 化 す る の で は な く 、 buf が 指 す オ ブ ジ ェ ク ト 内 の 状 態 を 初 期 化 す る 。

setstate_r() 関 数 は setstate(3) と 同 様 だ が 、 大 域 変 数 で 管 理 さ れ る 状 態 を 変 更 す る の で は な く 、 buf が 指 す オ ブ ジ ェ ク ト 内 の 状 態 を 変 更 す る 。

返 り 値

こ れ ら の 関 数 は す べ て 、 成 功 す る と 0 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に エ ラ ー の 原 因 を 示 す 値 が セ ッ ト さ れ る 。

エ ラ ー

EINVAL

8 バ イ ト よ り 小 さ い 状 態 配 列 が initstate_r() に 指 定 さ れ た 。

EINVAL

setstate_r() の 引 き 数 statebufbuf が NULL で あ っ た 。

EINVAL

random_r() の 引 き 数 bufresult が NULL で あ っ た 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 random_r(), srandom_r(), initstate_r(), setstate_r() は ス レ ッ ド セ ー フ で あ る 。

準 拠

こ れ ら の 関 数 は 非 標 準 で glibc に よ る 拡 張 で あ る 。

関 連 項 目

drand48(3), rand(3), random(3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。