libc ..(3264)
] -
zlib ..(-32-)
-
gtk2 ..(-64-)
-
The Unix98 specs require that largefile must be supported and in consequence the C library should export 64bit-off_t calls as well. However, older software has been compiled with a 32bit-off_t and therefore library makers can not simply change the API-calls as it would result in a callframe-mismatch. That's been the reason for specifying the 64on32 extensions to the C library.
This transitional API will make a sister symbol available for each call that would be affected by a change from 32bit-off_t into the 64bit-off_t - they follow a common naming scheme as that the original posix-name is used and a "64" appended. The glibc-2.2 does export all the relevant sister symbols (actually, since 2.1.3). - There are:
"creat64", "open64", "ftw64", "nftw64", "fgetpos64", "fopen64", "freopen64", "fseeko64", "fsetpos64", "ftello64", "tmpfile64", "mmap64", "fstat64", "lstat64", "stat64", "statvfs64", "fstatvfs64", "lockf64", "lseek64", "ftruncate64", "truncate64", "aio_read64", "aio_write64", "lio_listio64", "aio_erro64", "aio_return64", "aio_cancel64", "aio_suspend64";
Any software is free to use these API calls directly. The header
files of the C library do export also sister typedefs that are
relevant for the transitional API calls - most prominently you
will find off64_t
type that will always be
64bit even that the standard system defines off_t
to be 32bit. The long description should be looked up in Section 4
of the LargeFile Specification:
http://ftp.sas.com/standards/large.file/specs/api+.007.html#Sec4
While the transitional API is part of -D_LARGEFILE64_SOURCE
,
the largefile specification defines also a way that the traditional
off_t
has been made non-constant - here, a software may
simply be compiled with -D_FILE_OFFSET_BITS=64
and that will
make for a global redefine of this (almost basic) integral type
typedef off64_t off_t;
and furthermore all the various API-calls are remapped to their 64-bit sister-calls from the transitional 64on32 - while the sourcecode of an application might read "open()" or "lseek()" the binary code will in fact be linked to C library symbols calls "open64()" and "lseek64()". This scheme of 64on32 support is called "largefile sensitive" headers - depending on compile-defines they will change the off_t mode and make a program get linked to different symbols.
#define fopen fopen64 #define lseek lseek64