---
name: "getentropy"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/getentropy/3"
---

# getentropy(3)

fill a buffer with random bytes

## NAME

getentropy - fill a buffer with random bytes

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <unistd.h>
```

**int getentropy(**size\_t length;                **void** *buffer***\[***length***\], size\_t** *length***);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

**getentropy**():

```
    _DEFAULT_SOURCE
```

## DESCRIPTION

The **getentropy**() function writes *length* bytes of high-quality random data to the buffer starting at the location pointed to by *buffer*. The maximum permitted value for the *length* argument is 256.

A successful call to **getentropy**() always provides the requested number of bytes of entropy.

## RETURN VALUE

On success, this function returns zero. On error, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

- **EFAULT**

  Part or all of the buffer specified by *buffer* and *length* is not in valid addressable memory.

- **EIO**

  *length* is greater than 256.

- **EIO**

  An unspecified error occurred while trying to overwrite *buffer* with random data.

- **ENOSYS**

  This kernel version does not implement the [**getrandom**(2)](/getrandom/2.md) system call required to implement this function.

## STANDARDS

POSIX.1-2024.

## HISTORY

OpenBSD 5.6, glibc 2.25, FreeBSD 12.0, POSIX.1-2024.

## NOTES

The **getentropy**() function is implemented using [**getrandom**(2)](/getrandom/2.md).

Whereas the glibc wrapper makes [**getrandom**(2)](/getrandom/2.md) a cancelation point, **getentropy**() is not a cancelation point.

**getentropy**() is also declared in **\<sys/random.h\>**. (No feature test macro need be defined to obtain the declaration from that header file.)

A call to **getentropy**() may block if the system has just booted and the kernel has not yet collected enough randomness to initialize the entropy pool. In this case, **getentropy**() will keep blocking even if a signal is handled, and will return only once the entropy pool has been initialized.

## SEE ALSO

[**getrandom**(2)](/getrandom/2.md), [**urandom**(4)](/urandom/4.md), [**random**(7)](/random/7.md)
