truncate, ftruncate - truncate a file to a specified
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
Truncate causes the file named by path or referenced by fd
to be truncated to at most length bytes in size. If the
file previously was larger than this size, the extra data
is lost. If the file previously was shorter, it is
unspecified whether the file is left unchanged or is
extended. In the latter case the extended part reads as
zero bytes. With ftruncate, the file must be open for
On success, zero is returned. On error, -1 is returned,
and errno is set appropriately.
A component of the path prefix is not a directory.
A component of a pathname exceeded 255 characters,
or an entire path name exceeded 1023 characters.
ENOENT The named file does not exist.
EACCES Search permission is denied for a component of the
EACCES The named file is not writable by the user.
ELOOP Too many symbolic links were encountered in trans
lating the pathname.
EISDIR The named file is a directory.
EROFS The named file resides on a read-only file system.
The file is a pure procedure (shared text) file
that is being executed.
EIO An I/O error occurred updating the inode.
EBADF The fd is not a valid descriptor.
EINVAL The fd references a socket, not a file.
EINVAL The fd is not open for writing.
4.4BSD, SVr4 (these function calls first appeared in BSD
4.2). SVr4 documents additional truncate error conditions
EINTR, EMFILE, EMULTIHP, ENAMETOOLONG, ENFILE, ENOLINK,
ENOTDIR. SVr4 documents for ftruncate additional EAGAIN
and EINTR error conditions. POSIX has ftruncate but not
The POSIX standard does not define what happens if the
file has fewer bytes than length.
These calls should be generalized to allow ranges of bytes
in a file to be discarded.