The truncate and ftruncate functions cause the regular file named
by path or referenced by fd to be truncated to a size of
precisely length bytes.
If the file previously was larger than this size, the extra data is lost. If the
file previously was shorter, it is extended, and the extended part reads as
The file pointer is not changed.
If the size changed, then the ctime and mtime fields for the file are updated,
and suid and sgid mode bits may be cleared.
With ftruncate, the file must be open for writing; with truncate,
the file must be writable.
4.4BSD, SVr4 (these function calls first appeared in BSD 4.2). POSIX 1003.1-1996
has ftruncate. POSIX 1003.1-2001 also has truncate, as an XSI
SVr4 documents additional truncate error conditions EMFILE, EMULTIHP,
ENFILE, ENOLINK. SVr4 documents for ftruncate an additional EAGAIN
The above description is for XSI-compliant systems. For non-XSI-compliant
systems, the POSIX standard allows two behaviours for ftruncate when
length exceeds the file length (note that truncate is not
specified at all in such an environment): either returning an error, or
extending the file. (Most Unices follow the XSI requirement.)