# posix_fallocate

## 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)):
    
           **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).
           ┌───────────────────┬───────────────┬────────────────────────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├───────────────────┼───────────────┼────────────────────────────┤
           │ **posix_fallocate**() │ Thread safety │ MT-Safe (but see CAVEATS)  │
           └───────────────────┴───────────────┴────────────────────────────┘
    


## STANDARDS



           POSIX.1-2008.
    


## CAVEATS



           In the glibc implementation, **posix_fallocate**() is implemented
           using the fallocate(2) system call, which is MT-safe.  If the
           underlying filesystem does not support fallocate(2), 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) 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.
    


* * *