名 前
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() の 引 き 数 statebuf か buf が NULL で あ っ た 。 | ||
EINVAL |
random_r() の 引 き 数 buf か result が 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/ に 書 か れ て い る 。