In some situations it is useful to explicitly determine the size of a file. Since the 4.2BSD days there is a function to truncate a file to at most a given number of bytes and POSIX defines one additional function. The prototypes for these functions are in `unistd.h'.
truncation function truncates the file named by name to
at most length bytes. I.e., if the file was larger before the
extra bytes are stripped of. If the file was small or equal to
length in size before nothing is done. The file must be writable
by the user to perform this operation.
When the source file is compiled with _FILE_OFFSET_BITS == 64 the
truncate function is in fact truncate64 and the type
off_t has 64 bits which makes it possible to handle files up to
@math{2^63} bytes in length.
The return value is zero is everything went ok. Otherwise the return value is @math{-1} and the global variable errno is set to:
EACCES
EINVAL
EISDIR
ENOENT
ENOTDIR
This function was introduced in 4.2BSD but also was available in later System V systems. It is not added to POSIX since the authors felt it is only of marginally additional utility. See below.
truncate function. The
difference is that the length argument is 64 bits wide even on 32
bits machines which allows to handle file with a size up to @math{2^63}
bytes.
When the source file is compiled with _FILE_OFFSET_BITS == 64 on a
32 bits machine this function is actually available under the name
truncate and so transparently replaces the 32 bits interface.
ftruncate function is similar to the truncate
function. The main difference is that it takes a descriptor for an
opened file instead of a file name to identify the object. The file
must be opened for writing to successfully carry out the operation.
The POSIX standard leaves it implementation defined what happens if the
specified new length of the file is bigger than the original size.
The ftruncate function might simply leave the file alone and do
nothing or it can increase the size to the desired size. In this later
case the extended area should be zero-filled. So using ftruncate
is no reliable way to increase the file size but if it is possible it is
probably the fastest way. The function also operates on POSIX shared
memory segments if these are implemented by the system.
When the source file is compiled with _FILE_OFFSET_BITS == 64 the
ftruncate function is in fact ftruncate64 and the type
off_t has 64 bits which makes it possible to handle files up to
@math{2^63} bytes in length.
On success the function returns zero. Otherwise it returns @math{-1} and set errno to one of these values:
EBADF
EINVAL
EROFS
ftruncate function. The
difference is that the length argument is 64 bits wide even on 32
bits machines which allows to handle file with a size up to @math{2^63}
bytes.
When the source file is compiled with _FILE_OFFSET_BITS == 64 on a
32 bits machine this function is actually available under the name
ftruncate and so transparently replaces the 32 bits interface.
Go to the first, previous, next, last section, table of contents.