lseek
1. lseek.2.man
Manpage of LSEEK
LSEEK
Section: Руководство программиста Linux (2)Updated: 2010-09-11
Index Return to Main Contents
ИМЯ
lseek - изменяет файловое смещение, используемое при чтении/записиОБЗОР
#include <sys/types.h>#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
ОПИСАНИЕ
Функция lseek() устанавливает смещение в файловом дескрипторе fd в значение аргумента offset в соответствии с директивой whence, которая может принимать одно из следующих значений:- SEEK_SET
- Установить смещение равным offset (в байтах).
- SEEK_CUR
- Установить смещение равным текущему положению плюс offset (в байтах).
- SEEK_END
- Установить смещение равным размеру файла плюс offset (в байтах).
Функция lseek() позволяет задавать смещение, которое будет находиться за существующим концом файла (но это не изменяет размер файла). Если позднее по этому смещению будут записаны данные, то последующее чтение в промежутке («дырке») от конца файла до этого смещения, будет возвращать нулевые байты (aq\0aq), пока в этот промежуток действительно не будут записаны данные.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении lseek() возвращает получившееся в результате смещение в байтах от начала файла. При ошибке возвращается значение (off_t) -1 и в errno записывается код ошибки.ОШИБКИ
- EBADF
- fd не является открытым файловым дескриптором.
- EINVAL
- Значение whence не равно SEEK_SET, SEEK_CUR, SEEK_END; или результирующее смещение файла получается отрицательным, или находится за пределами, в которых можно производить смещение на устройстве.
- EOVERFLOW
- Результирующие файловое смещение не может быть представлено типом off_t.
- ESPIPE
- Значение fd связано с каналом, сокетом или FIFO.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, 4.3BSD, POSIX.1-2001.ЗАМЕЧАНИЯ
Применяемое в этом документе whence является некорректным английским словом, но в силу исторических причин использование этого слова продолжается.Некоторые устройства не могут выполнять смещения и в POSIX не указано какие устройства должны поддерживать lseek().
В Linux при использовании lseek() на терминальных устройствах tty возвращается ESPIPE.
Если вы будете конвертировать старый код, используйте вместо значений whence следующие макросы:
| старое значение | новое значение |
| 0 | SEEK_SET |
| 1 | SEEK_CUR |
| 2 | SEEK_END |
| L_SET | SEEK_SET |
| L_INCR | SEEK_CUR |
| L_XTND | SEEK_END |
Заметим, что файловые дескрипторы, созданные через dup(2) или fork(2), используют общий указатель на текущее положение в файле, так что позиционирование в таких файлах может приводить к состязательности процессов.
СМОТРИТЕ ТАКЖЕ
dup(2), fork(2), open(2), fseek(3), lseek64(3), posix_fallocate(3)
Index
This document was created by man2html using the manual pages.
Time: 17:16:33 GMT, January 19, 2012



