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

# posix\_fallocate(3)

allocate file space

## NAME

posix\_fallocate - allocate file space

## LIBRARY

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

## SYNOPSIS

```
#include <fcntl.h>
```

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

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

**posix\_fallocate**():

```
    _POSIX_C_SOURCE >= 200112L
```

## DESCRIPTION

The function **posix\_fallocate**() ensures that disk space is allocated for the file referred to by the file descriptor *fd* for the bytes in the range starting at *offset* and continuing for *size* bytes. After a successful call to **posix\_fallocate**(), subsequent writes to bytes in the specified range are guaranteed not to fail because of lack of disk space.

If the size of the file is less than *offset*+*size*, then the file is increased to this size; otherwise the file size is left unchanged.

## RETURN VALUE

**posix\_fallocate**() returns zero on success, or an error number on failure. Note that *errno* is not set.

## ERRORS

- **EBADF**

  *fd* is not a valid file descriptor, or is not opened for writing.

- **EFBIG**

  *offset+size* exceeds the maximum file size.

- **EINTR**

  A signal was caught during execution.

- **EINVAL**

  *offset* was less than 0, or *size* was less than or equal to 0, or the underlying filesystem does not support the operation.

- **ENODEV**

  *fd* does not refer to a regular file.

- **ENOSPC**

  There is not enough space left on the device containing the file referred to by *fd*.

- **EOPNOTSUPP**

  The filesystem containing the file referred to by *fd* does not support this operation. This error code can be returned by C libraries that don't perform the emulation shown in CAVEATS, such as musl libc.

- **ESPIPE**

  *fd* refers to a pipe.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **posix\_fallocate**() | Thread safety | MT-Safe (but see CAVEATS) |

## STANDARDS

POSIX.1-2008.

## HISTORY

glibc 2.1.94. POSIX.1-2001

POSIX.1-2008 says that an implementation *shall* give the **EINVAL** error if *size* was 0, or *offset* was less than 0. POSIX.1-2001 says that an implementation *shall* give the **EINVAL** error if *size* is less than 0, or *offset* was less than 0, and *may* give the error if *size* equals zero.

## CAVEATS

In the glibc implementation, **posix\_fallocate**() is implemented using the [**fallocate**(2)](/fallocate/2.md) system call, which is MT-safe. If the underlying filesystem does not support [**fallocate**(2)](/fallocate/2.md), then the operation is emulated with the following caveats:

- •

  The emulation is inefficient.

- •

  There is a race condition where concurrent writes from another thread or process could be overwritten with null bytes.

- •

  There is a race condition where concurrent file size increases by another thread or process could result in a file whose size is smaller than expected.

- •

  If *fd* has been opened with the **O\_APPEND** or **O\_WRONLY** flags, the function fails with the error **EBADF**.

In general, the emulation is not MT-safe. On Linux, applications may use [**fallocate**(2)](/fallocate/2.md) if they cannot tolerate the emulation caveats. In general, this is only recommended if the application plans to terminate the operation if **EOPNOTSUPP** is returned, otherwise the application itself will need to implement a fallback with all the same problems as the emulation provided by glibc.

## SEE ALSO

[**fallocate**(1)](/fallocate/1.md), [**fallocate**(2)](/fallocate/2.md), [**lseek**(2)](/lseek/2.md), [**posix\_fadvise**(2)](/posix_fadvise/2.md)
