NAME
truncate,
ftruncate —
truncate a file to a specified length
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <unistd.h>
int
truncate(
const
char *path,
off_t
length);
int
ftruncate(
int
fd,
off_t length);
DESCRIPTION
truncate() causes the file named by
path
or referenced by
fd to have a size of
length bytes. If the file previously was larger than
this size, the extra data is discarded. If it was previously shorter than
length, its size is increased to the specified value and
the extended area appears as if it were zero-filled.
With
ftruncate(), the file must be open for writing; for
truncate(), the process must have write permissions for the
file.
RETURN VALUES
A value of 0 is returned if the call succeeds. If the call fails a -1 is
returned, and the global variable
errno specifies the
error.
ERRORS
Error return codes common to
truncate() and
ftruncate() are:
-
-
- [
EINVAL
]
- The length argument was less than
0.
-
-
- [
EIO
]
- An I/O error occurred updating the inode.
-
-
- [
EISDIR
]
- The named file is a directory.
-
-
- [
ENOSPC
]
- There was no space in the file system to complete the
operation.
-
-
- [
EROFS
]
- The named file resides on a read-only file system.
-
-
- [
ETXTBSY
]
- The file is a pure procedure (shared text) file that is
being executed.
Error codes specific to
truncate() are:
-
-
- [
EACCES
]
- Search permission is denied for a component of the path
prefix, or the named file is not writable by the user.
-
-
- [
EFAULT
]
- path points outside the process's
allocated address space.
-
-
- [
ELOOP
]
- Too many symbolic links were encountered in translating the
pathname.
-
-
- [
ENAMETOOLONG
]
- A component of a pathname exceeded
{
NAME_MAX
} characters, or an entire path name
exceeded {PATH_MAX
} characters.
-
-
- [
ENOENT
]
- The named file does not exist.
-
-
- [
ENOTDIR
]
- A component of the path prefix is not a directory.
Error codes specific to
ftruncate() are:
-
-
- [
EBADF
]
- The fd is not a valid
descriptor.
-
-
- [
EINVAL
]
- The fd references a socket, not a
file, or the fd is not open for writing.
SEE ALSO
fdiscard(2),
open(2)
STANDARDS
Use of
truncate() to extend a file is an
IEEE
Std 1003.1-2004 (“POSIX.1”) extension, and is thus not
portable. Files can be extended in a portable way seeking (using
lseek(2)) to the required size
and writing a single character with
write(2).
HISTORY
The
truncate() and
ftruncate() function
calls appeared in
4.2BSD.