---
name: "arc4random"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/arc4random"
---

# arc4random(3)

random number generator

## NAME

**arc4random**, **arc4random\_buf**, **arc4random\_uniform** – random number generator

## SYNOPSIS

**#include \<stdlib.h\>**

*uint32\_t*\

**arc4random**(*void*);

*void*\

**arc4random\_buf**(*void \*buf*, *size\_t nbytes*);

*uint32\_t*\

**arc4random\_uniform**(*uint32\_t upper\_bound*);

## DESCRIPTION

These functions use a cryptographic pseudo-random number generator to generate high quality random bytes very quickly.  One data pool is used for all consumers in a process, so that consumption under program flow can act as additional stirring.  The subsystem is re-seeded from the kernel random number subsystem on a regular basis, and also upon  [fork(2)](/fork/2.md).

This family of functions provides higher quality random data than those described in [rand(3)](/rand/3.md), [random(3)](/random/3.md), and [rand48(3)](/rand48/3.md). They can be called in almost all environments, including [chroot(2)](/chroot/2.md), and their use is encouraged over all other standard library functions for random numbers.

**arc4random**() returns a single 32-bit value.

**arc4random\_buf**() fills the region *buf* of length *nbytes* with random data.

**arc4random\_uniform**() will return a single 32-bit value, uniformly distributed but less than *upper\_bound*. This is recommended over constructions like “arc4random() % upper\_bound” as it avoids "modulo bias" when the upper bound is not a power of two. In the worst case, this function may require multiple iterations to ensure uniformity.

## RETURN VALUES

These functions are always successful, and no return value is reserved to indicate an error.

## SEE ALSO

[rand(3)](/rand/3.md), [rand48(3)](/rand48/3.md), [random(3)](/random/3.md), [random(4)](/random/4.md)

## HISTORY

The original version of this random number generator used the RC4 (also known as ARC4) algorithm.  In OS X 10.12 it was replaced with the NIST-approved AES cipher, and it may be replaced again in the future as cryptographic techniques advance.  A good mnemonic is “A Replacement Call for Random”.
