### 3.34 `random`, `srandom`—pseudo-random numbers ¶

Synopsis

    #define _XOPEN_SOURCE 500
    #include <stdlib.h>
    long int random(void);
    void srandom(unsigned int seed);

Description
`random` returns a different integer each time it is called; each integer is chosen by an algorithm designed to be unpredictable, so that you can use `random` when you require a random number. The algorithm depends on a static variable called the “random seed”; starting with a given value of the random seed always produces the same sequence of numbers in successive calls to `random`.

You can set the random seed using `srandom`; it does nothing beyond storing its argument in the static variable used by `rand`. You can exploit this to make the pseudo-random sequence less predictable, if you wish, by using some other unpredictable value (often the least significant parts of a time-varying value) as the random seed before beginning a sequence of calls to `rand`; or, if you wish to ensure (for example, while debugging) that successive runs of your program use the same “random” numbers, you can use `srandom` to set the same random seed at the outset.

Returns
`random` returns the next pseudo-random integer in sequence; it is a number between `0` and `RAND_MAX` (inclusive).

`srandom` does not return a result.

Notes
`random` and `srandom` are unsafe for multi-threaded applications.

_XOPEN_SOURCE may be any value >= 500.

Portability
`random` is required by XSI. This implementation uses the same algorithm as `rand`.

`random` requires no supporting OS subroutines.