> Linux Reviews > man >

lseek

lseek


  1. lseek.2.man


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 следующие макросы:

старое значениеновое значение
0SEEK_SET
1SEEK_CUR
2SEEK_END
L_SETSEEK_SET
L_INCRSEEK_CUR
L_XTNDSEEK_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

SVENSKA - SVENSKA - SVENSKA - SVENSKA - ja - nl - pl