ОБЗОР
#define _LARGEFILE64_SOURCE /* См. feature_test_macros(7) */
#include <sys/types.h>
#include <unistd.h>
off64_t lseek64(int fd, off64_t offset, int whence);
ОПИСАНИЕ
Семейство вызовов lseek(2) изменяет смещение в открытом файле, с которым
связан файловый дескриптор fd, на offset байт относительно начала,
текущего положения или конца файла, в зависимости от значений whence —
SEEK_SET, SEEK_CUR, или SEEK_END, соответственно.
Подробности, возвращаемое значение и ошибки смотрите в lseek(2).
Доступно четыре интерфейса: lseek(2), lseek64(), llseek(2) и _llseek(2).
lseek()
Прототип:off_t lseek(int fd, off_t offset, int whence);
В lseek(2) используется тип off_t, который в 32-битной системе является 32-битным знаковым типом, если только при компиляция не определён макрос
в этом случае он будет 64-битным знаковым типом.
#define _FILE_OFFSET_BITS 64
lseek64()
Прототип:off64_t lseek64(int fd, off64_t offset, int whence);
В библиотечной функции lseek64() используется 64-битный тип, даже если off_t является 32-битным типом. Ÿ прототип (и тип off64_t) доступен только когда при компиляции определён макрос
Функция lseek64() доступна начиная с glibc 2.1 и определена как псевдоним llseek().
#define _LARGEFILE64_SOURCE
llseek()
Прототип:loff_t llseek(int fd, loff_t offset, int whence);
Тип loff_t является 64-битным знаковым типом. Библиотечная функция llseek() доступна в glibc и работает без каких-либо дополнительных определений. Однако в glibc для неё нет прототипа. Пользователи должны добавить указанный выше прототип или его эквивалент в свой исходный код. Когда пользователи стали жаловаться на потерю данных, вызванную неправильной компиляцией e2fsck(8), в glibc 2.1.3 добавили предупреждение времени компоновки.
"the `llseek' function may be dangerous; use `lseek64' instead."
Это делает данную бесполезной в случае, если кто-то захочет избавиться от предупреждения.
_llseek()
На 32-битных архитектурах данный системный вызов используется для реализации перечисленных выше функций. Прототип:int _llseek(int fd, off_t offset_hi, off_t offset_lo, loff_t *result, int whence);
Подробную информацию смотрите в llseek(2).
На 64-битных архитектурах системный вызов _llseek() не требуется. Вместо него в них используется системный вызов lseek(2), поддерживающий 64-битные файловые смещения.
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс Атрибут Значение
lseek64()
безвредность в потоках: безвредно (MT-Safe)