ИМЯ¶
lseek - установить
смещение для
позиционирования
операций
чтения/записи
ОБЗОР¶
#include <sys/types.h>
#include <unistd.h>
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) разделяют
указатель
текущей
позиции в
файле, так
что
позиционирование
таких файлов
может быть
выполнено на
тех же
условиях.
СМОТРИТЕ
ТАКЖЕ¶
dup(2),
fork(2),
open(2),
fseek(3)
ПЕРЕВОД¶
Перевёл с
английского
Виктор
Вислобоков
<corochoone@perm.ru> 2003