From: Jens Maurer (Jens.Maurer_at_[hidden])
Date: 2004-01-31 12:44:02


Beman Dawes wrote:
> On POSIX compliant 32-bit systems, is there any reliable way to find the
> size of a file?

First, POSIX only had stat(), which is limited to 32 bits, as you
found out. When files got large enough that this wasn't a good
assumption any more even on 32bit systems, a new interface was
introduced: stat64() which has, for example, a 64bit
stat64::st_size .
(Btw, Linux 2.6 supports up to 16 TB file sizes on 32bit machines,
AFAIK.)

Of course, 64bit environments have their regular stat()
use 64bit stat::st_size.

You get stat64() by #define _LARGEFILE64_SOURCE .
You get stat() to use a 64bit stat::st_size even on 32bit
environments by #define _FILE_OFFSET_BITS=64 .

Both options require reasonably recent Unix systems.
The latter option may impede binary compatibility if some
modules are compiled with the #define and others aren't,
because the perceived "struct stat" size will be different.

Jens Maurer