TRUNCATE(2)                Linux Programmer's Manual               TRUNCATE(2)

       truncate, ftruncate - truncate a file to a specified length

       #include <unistd.h>
       #include <sys/types.h>

       int truncate(const char *path, off_t length);
       int ftruncate(int fd, off_t length);

       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

       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 zero bytes.

       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.

       On  success,  zero is returned.  On error, -1 is returned, and errno is
       set appropriately.

       For truncate:

       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.

       EFBIG  The argument length is larger than the maximum file size. (XSI)

       EINTR  A signal was caught during execution.

       EINVAL The  argument length is negative or larger than the maximum file

       EIO    An I/O error occurred updating the inode.

       EISDIR The named file is a directory.

       ELOOP  Too many symbolic links  were  encountered  in  translating  the

              A  component of a pathname exceeded 255 characters, or an entire
              path name exceeded 1023 characters.

       ENOENT The named file does not exist.

              A component of the path prefix is not 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

       For  ftruncate the same errors apply, but instead of things that can be
       wrong with path, we now have things that can be wrong with fd:

       EBADF  The fd is not a valid descriptor.

       EBADF or EINVAL
              The fd is not open for writing.

       EINVAL The fd does not reference a regular file.

       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 extension.

       SVr4 documents additional truncate error conditions  EMFILE,  EMULTIHP,
       ENFILE,  ENOLINK.   SVr4  documents  for ftruncate an additional EAGAIN
       error condition.

       The above description is for XSI-compliant systems.   For  non-XSI-com-
       pliant  systems, the POSIX standard allows two behaviours for ftruncate
       when length exceeds the file length (note that truncate is  not  speci-
       fied  at  all  in  such  an environment): either returning an error, or
       extending the file.  (Most Unices follow the XSI requirement.)


                                  1998-12-21                       TRUNCATE(2)