lseek64(3) изменяет смещение в файле, используемое при чтении/записи, в

ОБЗОР

#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 байт относительно начала, текущего положения или конца файла, в зависимости от значений whenceSEEK_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)