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

# NAME

`rand`, `rand_r`, `srand`, `srand_deterministic` — bad pseudo-random number generator

# SYNOPSIS

`#include <stdlib.h>`

void
`srand`(unsigned int seed);

void
`srand_deterministic`(unsigned int seed);

int
`rand`(void);

int
`rand_r`(unsigned int *seed);

# DESCRIPTION

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`() function 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.

# SEE ALSO

arc4random(3), rand48(3), random(3)

# STANDARDS

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.

# HISTORY

The functions `rand`() and `srand`() first appeared in Version 3 AT&T UNIX.

March 29, 2022 | Debian