off_t lseek(int fildes, off_t offset, int whence);
ОПИСАНИЕ
Функция
lseek
устанавливает смещение для файлового дескриптора
fildes
в значение аргумента
offset
в соответствии с директивой
whence
которая может принимать одно из следующих значений:
SEEK_SET
Смещение устанавливается в
offset
байт (от начала файла -- прим. пер.).
SEEK_CUR
Смещение устанавливается как текущее смещение плюс
offset
байт.
SEEK_END
Смещение устанавливается как размер файла плюс
offset
байт.
Функция
lseek
позволяет задавать смещения, которые будут находиться за существующим
концом файла (но это не изменяет размер файла). Если позднее по этому
смещению будут записаны данные, то последующее чтение в
промежутке от конца файла до этого смещения, будет возвращать нулевые
байты (пока в этот промежуток не будут фактически записаны данные).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнеии
lseek
возвращает получившееся в результате смещение в батах от начала
файла. В противном случае, возвращается значение (off_t)-1 и
errno
показывает ошибку.
ОШИБКИ
EBADF
fildes
не является дескриптором открытого файла.
ESPIPE
fildes
ассоциирован с каналом, сокетом или FIFO.
EINVAL
whence
не является одним из значений SEEK_SET, SEEK_CUR, SEEK_END
или смещение в файле, которое получилось в результате является
отрицательным.
EOVERFLOW
Получившееся в результате смещение не может быть представлено
типом off_t.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, POSIX, BSD 4.3
ОГРАНИЧЕНИЯ
Некоторые устройства несовместимы с позиционированием, а POSIX не
определяет какие устройства должны его поддерживать.
Специальные ограничения Linux: при использовании lseek на терминальных
устройствах tty возвращается
ESPIPE.
ЗАМЕЧАНИЯ
Использование в этом документе слова
whence
является некорректным для английского языка, но в силу исторических
причин использование этого слова продолжается.
Если вы будете конвертировать старый код, подставляйте вместо значений
whence следующие макросы:
old
new
0
SEEK_SET
1
SEEK_CUR
2
SEEK_END
L_SET
SEEK_SET
L_INCR
SEEK_CUR
L_XTND
SEEK_END
SVR1-3 возвращает long вместо off_t, BSD возвращает int.
Заметим, что файловые дескрипторы, созданные через
dup(2)
или
fork(2)
разделяют указатель текущей позиции в файле, так что позиционирование таких
файлов может быть выполнено на тех же условиях.