RAND(3) | Library Functions Manual | RAND(3) |

`rand`

, `rand_r`

,
`srand`

, `srand_deterministic`

—
bad pseudo-random number generator

`#include <stdlib.h>`

`void`

`srand`

(`unsigned
int seed`);

`void`

`srand_deterministic`

(`unsigned
int seed`);

`int`

`rand`

(`void`);

`int`

`rand_r`

(`unsigned
int *seed`);

Standards insist that this interface return deterministic
results. Unsafe usage is very common, so OpenBSD
changed the subsystem to return non-deterministic results by default.

To satisfy portable code, `srand`

() may be
called to initialize the subsystem. In OpenBSD the
`seed` variable is ignored, and strong random number
results will be provided from
arc4random(3). In other
systems, the `seed` variable primes a simplistic
deterministic algorithm.

If the standardized behavior is required
`srand_deterministic`

() can be substituted for
`srand`

(), then subsequent
`rand`

() calls will return results using the
deterministic algorithm.

The `rand`

() function returns a result in
the range of 0 to `RAND_MAX`

. By default, this result
comes from arc4random(3).
If `srand_deterministic`

() was called, the result will
be computed using the deterministic algorithm.

The `rand_r`

() is a thread-safe version of
`rand`

(). Storage for the seed must be provided
through the `seed` argument, and needs to have been
initialized by the caller. It always operates using the deterministic
algorithm.

`rand`

() function conforms to ANSI
X3.159-1989 (“ANSI C89”).
The `rand_r`

() function conforms to
IEEE Std 1003.1-2008 (“POSIX.1”).

The `srand`

() function does not conform to
ANSI X3.159-1989 (“ANSI C89”),
intentionally.

The `srand_deterministic`

() function is an
OpenBSD extension.

`rand`

() and `srand`

()
first appeared in Version 3 AT&T UNIX.
December 9, 2014 | OpenBSD-6.2 |