Provided by: manpages-dev_3.54-1ubuntu1_all bug

NAME

       fallocate - manipulate file space

SYNOPSIS

       #define _GNU_SOURCE             /* See feature_test_macros(7) */
       #include <fcntl.h>

       int fallocate(int fd, int mode, off_t offset, off_t len);

DESCRIPTION

       This  is  a  nonportable,  Linux-specific  system  call.   For  the portable, POSIX.1-specified method of
       ensuring that space is allocated for a file, see posix_fallocate(3).

       fallocate() allows the caller to directly manipulate the allocated disk space for the file referred to by
       fd for the byte range starting at offset and continuing for len bytes.

       The mode argument determines the operation to be performed on the given range.  Details of the  supported
       operations are given in the subsections below.

   Allocating disk space
       The  default  operation  (i.e.,  mode  is zero) of fallocate() allocates and initializes to zero the disk
       space within the range specified by offset and len.  The file size  (as  reported  by  stat(2))  will  be
       changed  if  offset+len  is  greater  than  the  file  size.  This default behavior closely resembles the
       behavior of  the  posix_fallocate(3)  library  function,  and  is  intended  as  a  method  of  optimally
       implementing that function.

       After  a successful call, subsequent writes into the range specified by offset and len are guaranteed not
       to fail because of lack of disk space.

       If the FALLOC_FL_KEEP_SIZE flag is specified in mode, the behavior of the call is similar, but  the  file
       size  will  not be changed even if offset+len is greater than the file size.  Preallocating zeroed blocks
       beyond the end of the file in this manner is useful for optimizing append workloads.

       Because allocation is done in block size chunks, fallocate() may allocate a larger range  of  disk  space
       than was specified.

   Deallocating file space
       Specifying  the FALLOC_FL_PUNCH_HOLE flag (available since Linux 2.6.38) in mode deallocates space (i.e.,
       creates a hole) in the byte range starting at offset and continuing for len bytes.  Within the  specified
       range,  partial  filesystem  blocks  are  zeroed,  and whole filesystem blocks are removed from the file.
       After a successful call, subsequent reads from this range will return zeroes.

       The FALLOC_FL_PUNCH_HOLE flag must be ORed with FALLOC_FL_KEEP_SIZE in mode; in other  words,  even  when
       punching off the end of the file, the file size (as reported by stat(2)) does not change.

       Not all filesystems support FALLOC_FL_PUNCH_HOLE; if a filesystem doesn't support the operation, an error
       is returned.

RETURN VALUE

       On success, fallocate() returns zero.  On error, -1 is returned and errno is set to indicate the error.

ERRORS

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

       EFBIG  offset+len exceeds the maximum file size.

       EINTR  A signal was caught during execution.

       EINVAL offset was less than 0, or len was less than or equal to 0.

       EIO    An I/O error occurred while reading from or writing to a filesystem.

       ENODEV fd  does  not refer to a regular file or a directory.  (If fd is a pipe or FIFO, a different error
              results.)

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

       ENOSYS This kernel does not implement fallocate().

       EOPNOTSUPP
              The filesystem containing the file referred to by fd does not support this operation; or the  mode
              is not supported by the filesystem containing the file referred to by fd.

       EPERM  The   file   referred  to  by  fd  is  marked  immutable  (see  chattr(1)).   Or:  mode  specifies
              FALLOC_FL_PUNCH_HOLE and the file referred to by fd is marked append-only (see chattr(1)).

       ESPIPE fd refers to a pipe or FIFO.

VERSIONS

       fallocate() is available on Linux since kernel 2.6.23.  Support is provided by glibc since version  2.10.
       The FALLOC_FL_* flags are defined in glibc headers only since version 2.18.

CONFORMING TO

       fallocate() is Linux-specific.

SEE ALSO

       fallocate(1), ftruncate(2), posix_fadvise(3), posix_fallocate(3)

COLOPHON

       This  page  is  part  of  release 3.54 of the Linux man-pages project.  A description of the project, and
       information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.

Linux                                              2013-06-10                                       FALLOCATE(2)