For more details, return value, and errors, see lseek(2).
off_t lseek(int fd, off_t offset, int whence);
lseek(2) uses the type off_t. This is a 32-bit signed type on 32-bit architectures, unless one compiles with
#define _FILE_OFFSET_BITS 64in which case it is a 64-bit signed type.
off64_t lseek64(int fd, off64_t offset, int whence);
The library routine lseek64() uses a 64-bit type even when off_t is a 32-bit type. Its prototype (and the type off64_t) is available only when one compiles with
#define _LARGEFILE64_SOURCEThe function lseek64() is available since glibc 2.1, and is defined to be an alias for llseek().
loff_t llseek(int fd, loff_t offset, int whence);
The type loff_t is a 64-bit signed type. The library routine llseek() is available in glibc and works without special defines. However, the glibc headers do not provide a prototype. Users should add the above prototype, or something equivalent, to their own source. When users complained about data loss caused by a miscompilation of e2fsck(8), glibc 2.1.3 added the link-time warning
"the `llseek' function may be dangerous; use `lseek64' instead."
int _llseek(int fd, off_t offset_hi, off_t offset_lo, loff_t *result, int whence);
For more details, see llseek(2).
64-bit systems don't need an _llseek() system call. Instead, they have an lseek(2) system call that supports 64-bit file offsets.