LSEEK64(3)

ИМЯ
lseek64 - изменяет смещение в файле, используемое при чтении/записи, в соответствии с 64-битным значением

ОБЗОР
#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-битным знаковым типом, если только при компиляция не определён макрос

#define _FILE_OFFSET_BITS 64

в этом случае он будет 64-битным знаковым типом.

  lseek64()
Прототип:

off64_t lseek64(int fd, off64_t offset, int whence);

В библиотечной функции lseek64() используется 64-битный тип, даже если off_t является 32-битным типом. Её прототип (и тип off64_t) доступен только когда при компиляции определён макрос

#define _LARGEFILE64_SOURCE

Функция lseek64() доступна начиная с glibc 2.1 и определена как псевдоним llseek().

  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

СМОТРИТЕ ТАКЖЕ
llseek(2), lseek(2)