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 deterministic sequence algorithm changed a
number of times since original development, is underspecified, and should
not be relied upon to remain consistent between platforms and over time.

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.

The `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.

The functions `rand`

() and
`srand`

() first appeared in
Version 3 AT&T UNIX.

February 12, 2021 | OpenBSD-current |