---
name: "read_random"
section: "9"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/read_random"
---

# read\_random(9)

supply pseudo-random numbers

## NAME

**arc4rand**, **arc4random**, **random**, **read\_random**, **srandom** – supply pseudo-random numbers

## SYNOPSIS

**#include \<sys/libkern.h\>**

*void*\

**srandom**(*u\_long seed*);

*u\_long*\

**random**(*void*);

*void*\

**arc4rand**(*void \*ptr*, *u\_int length*, *int reseed*);

*u\_int32\_t*\

**arc4random**(*void*);

**#include \<sys/random.h\>**

*int*\

**read\_random**(*void \*buffer*, *int count*);

## DESCRIPTION

The **random**() function will by default produce a sequence of numbers that can be duplicated by calling **srandom**() with ‘1’ as the *seed*. The **srandom**() function may be called with any arbitrary *seed* value to get slightly more unpredictable numbers. It is important to remember that the **random**() function is entirely predictable, and is therefore not of use where knowledge of the sequence of numbers may be of benefit to an attacker.

The **arc4rand**() function will return very good quality random numbers, slightly better suited for security-related purposes. The random numbers from **arc4rand**() are seeded from the entropy device if it is available. Automatic reseeds happen after a certain timeinterval and after a certain number of bytes have been delivered. A forced reseed can be forced by passing a non-zero value in the *reseed* argument.

The **read\_random**() function is used to return entropy directly from the entropy device if it has been loaded. If the entropy device is not loaded, then the *buffer* is filled with output generated by **random**(). The *buffer* is filled with no more than *count* bytes. It is advised that **read\_random**() is not used; instead use **arc4rand**()

All the bits generated by **random**(), **arc4rand**() and **read\_random**() are usable. For example, ‘random()&01’ will produce a random binary value.

The **arc4random**() is a convenience function which calls **arc4rand**() to return a 32 bit pseudo-random integer.

## RETURN VALUES

The **random**() function uses a non-linear additive feedback random number generator employing a default table of size 31 long integers to return successive pseudo-random numbers in the range from 0 to (2\*\*31)−1. The period of this random number generator is very large, approximately 16\*((2\*\*31)−1).

The **arc4rand**() function uses the RC4 algorithm to generate successive pseudo-random bytes. The **arc4random**() function uses **arc4rand**() to generate pseudo-random numbers in the range from 0 to (2\*\*32)−1.

The **read\_random**() function returns the number of bytes placed in *buffer*.

## AUTHORS

Dan Moschuk wrote **arc4random**(). Mark R V Murray wrote **read\_random**().
