fallocate — manipulate file space
#define _GNU_SOURCE #include <fcntl.h>
int fallocate( |
int fd, |
int mode, | |
off_t offset, | |
off_t len) ; |
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
().
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.
Currently only one flag is supported for mode
:
FALLOC_FL_KEEP_SIZE
This flag allocates and initializes to zero the disk
space within the range specified by offset
and len
. After a successful
call, subsequent writes into this range are guaranteed
not to fail because of lack of disk space.
Preallocating zeroed blocks beyond the end of the file
is useful for optimizing append workloads.
Preallocating blocks does not change the file size (as
reported by stat(2)) even if it
is less than offset
+len
.
If FALLOC_FL_KEEP_SIZE
flag
is not specified in mode
, the default behavior is
almost same as when this flag is specified. The only
difference is that on success, the file size 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.
Because allocation is done in block size chunks,
fallocate
() may allocate a
larger range than that which was specified.
fd
is not a
valid file descriptor, or is not opened for
writing.
offset
+len
exceeds the maximum
file size.
A signal was caught during execution.
offset
was
less than 0, or len
was less than or
equal to 0.
An I/O error occurred while reading from or writing to a file system.
fd
does not
refer to a regular file or a directory. (If fd
is a pipe or FIFO, a
different error results.)
There is not enough space left on the device
containing the file referred to by fd
.
The file system containing the file referred to by
fd
does not
support this operation.
The mode
is
not supported by the file system containing the file
referred to by fd
.
fallocate
() is available on
Linux since kernel 2.6.23. Support is provided by glibc since
version 2.10.
This page is part of release 3.24 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/.
Copyright (c) 2007 Silicon Graphics, Inc. All Rights Reserved Written by Dave Chinner <dgcsgi.com> May be distributed as per GNU General Public License version 2. |