---
name: "posix_fallocate"
section: "2"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/posix_fallocate"
---

# posix\_fallocate(2)

pre-allocate storage for a range in a file

## NAME

**posix\_fallocate** – pre-allocate storage for a range in a file

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*int*\

**posix\_fallocate**(*int fd*, *off\_t offset*, *off\_t len*);

## DESCRIPTION

Required storage for the range *offset* to *offset*, *+* *len* in the file referenced by *fd* is guaranteed to be allocated upon successful return. That is, if **posix\_fallocate**() returns successfully, subsequent writes to the specified file data will not fail due to lack of free space on the file system storage media. Any existing file data in the specified range is unmodified. If *offset*, *+* *len* is beyond the current file size, then **posix\_fallocate**() will adjust the file size to *offset*, *+* *len*. Otherwise, the file size will not be changed.

Space allocated by **posix\_fallocate**() will be freed by a successful call to [creat(2)](/creat/2.md) or [open(2)](/open/2.md) that truncates the size of the file. Space allocated via **posix\_fallocate**() may be freed by a successful call to [ftruncate(2)](/ftruncate/2.md) that reduces the file size to a size smaller than *offset*, *+* *len*.

## RETURN VALUES

If successful, **posix\_fallocate**() returns zero. It returns an error on failure, without setting *errno*.

## ERRORS

Possible failure conditions:

- \[EBADF\]

  The *fd* argument is not a valid file descriptor.

- \[EBADF\]

  The *fd* argument references a file that was opened without write permission.

- \[EFBIG\]

  The value of *offset*, *+* *len* is greater than the maximum file size.

- \[EINTR\]

  A signal was caught during execution.

- \[EINVAL\]

  The *len* argument was less than or equal to zero, the *offset* argument was less than zero.

- \[EIO\]

  An I/O error occurred while reading from or writing to a file system.

- \[EINTEGRITY\]

  Corrupted data was detected while reading from the file system.

- \[ENODEV\]

  The *fd* argument does not refer to a file that supports **posix\_fallocate**.

- \[ENOSPC\]

  There is insufficient free space remaining on the file system storage media.

- \[ENOTCAPABLE\]

  The file descriptor *fd* has insufficient rights.

- \[EOPNOTSUPP\]

  The operation is not supported by the file system.

- \[ESPIPE\]

  The *fd* argument is associated with a pipe or FIFO.

## SEE ALSO

[creat(2)](/creat/2.md), [ftruncate(2)](/ftruncate/2.md), [open(2)](/open/2.md), [unlink(2)](/unlink/2.md)

## STANDARDS

The **posix\_fallocate**() system call conforms to IEEE Std 1003.1-2024 (“POSIX.1”).

## HISTORY

The **posix\_fallocate**() function appeared in FreeBSD 9.0.

Previous versions of **posix\_fallocate** used EINVAL to indicate that the operation is not supported by the file system, as specified in IEEE Std 1003.1 (“POSIX.1”) Base Specifications, Issue 7. IEEE Std 1003.1 (“POSIX.1”) Base Specifications, Issue 8 switched to requiring EOPNOTSUPP for this error case. ZFS adopted the latter convention in FreeBSD 15.0, and the remaining filesystems in base adopted it in FreeBSD 15.1.

## AUTHORS

**posix\_fallocate**() and this manual page were initially written by Matthew Fleming ⟨*mdf@FreeBSD.org*⟩.
