lseek - устанавливает позицию чтения/записи информации в файле
НАЗВАНИЕlseek - устанавливает позицию чтения/записи информации в
файле
СИНТАКСИС
#include
#include
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 не имеет разрешенного значения.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, POSIX, BSD 4.3
ОГРАНИЧЕНИЯ
Некоторые устройства не поддерживают изменение позиции в
файле, а стандарт POSIX не указывает, какие устройства
должны поддерживать эту операцию. Ограничения,
специфичные для Linux: использование lseek на устройстве
tty возвращает ESPIPE. Другие системы возвращают
количество записанных символов, используя SEEK_SET для
установки счетчика. Некоторые устройства (например,
/dev/null) не приводят к ошибке ESPIPE, но возвращают
указатель с неопределенным значением.
ЗАМЕЧАНИЯ
Использование слова whence в этом документе не является
корректным с точки зрения английского языка, но
сохраняется в силу исторических причин. При
преобразовании старого кода заменяйте значения whence
следующими макросами:
старое новое
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),
разделяют указатель текущего положения в файле, поэтому
поиск по таким файлам будет похож на гонку.