ftruncate(), ftruncate64()

Truncate a file

Synopsis:

#include <unistd.h>

int ftruncate( int fildes,
               off_t length );

int ftruncate64( int fildes,
                 off64_t length );

Arguments:

fildes
The descriptor for the file that you want to truncate.
length
The length that you want the file to be, in bytes.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The ftruncate() and ftruncate64() functions cause the file referenced by fildes to have a size of length bytes. The ftruncate64() function is a large-file support version of ftruncate().

Note: In QNX Neutrino 6.6 or later, the large-file support functions and data types appear in the name space only if you define _LARGEFILE64_SOURCE when you compile your code. For more information, see Classification in What's in a Function Description?

If the size of the file previously exceeded length, the extra data is discarded (this is similar to using the F_FREESP option with fcntl()). If the size of the file was previously shorter than length, the file size is extended with NUL characters (similar to the F_ALLOCSP option to fcntl()).

These functions don't modify the value of the seek pointer.

Upon successful completion, the ftruncate() function marks the st_ctime and st_mtime fields of the file for update. If the ftruncate() function is unsuccessful, the file is unaffected.

Returns:

Zero for success, or -1 if an error occurred (errno is set).

Errors:

EBADF
The fildes argument isn't a valid file descriptor.
EFBIG
The file is a regular file and length is greater than the offset maximum associated with the file.
EINTR
A signal was caught during the call to ftruncate().
EINVAL
The fildes argument doesn't refer to a file on which this operation is possible, the filedes argument isn't open for writing or the length argument is less than the minimum file size for the specified filesystem.
EIO
An I/O error occurred while reading from or writing to the filesystem.
ENOMEM
There wasn't enough memory to change the size of a shared memory object.
ENOSYS
The ftruncate() function isn't implemented for the filesystem specified by filedes.
ENOTSUP
The ftruncate() function is implemented for the specified filesystem, but the specific operation (F_ALLOCSP or F_FREESP; see fcntl()) isn't supported.
EROFS
The file resides on a read-only filesystem.

Classification:

ftruncate() is POSIX 1003.1; ftruncate64() is Large-file support

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes