_lseek
, _lseeki64
Перемещает указатель файла в заданное местоположение.
Синтаксис
long _lseek(
int fd,
long offset,
int origin
);
__int64 _lseeki64(
int fd,
__int64 offset,
int origin
);
Параметры
fd
Дескриптор файла, ссылающийся на открытый файл.
offset
Количество байт начиная с origin
.
origin
Первоначальная позиция.
Возвращаемое значение
Функция _lseek
возвращает смещение новой позиции в байтах относительно начала файла. Функция _lseeki64
возвращает смещение в виде 64-разрядного целого числа. Функция возвращает значение -1L, чтобы указать ошибку. Если передан недопустимый параметр, например дескриптор недопустимого файла, или offset
значениеorigin
, указанное до начала файла, вызывается обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, эти функции устанавливают параметр errno
в значение EBADF
и возвращают –1L. Если устройство неспособно выполнять поиск (например, терминалы и принтеры), возвращаемое значение не определено.
Дополнительные сведения об этих и других кодах ошибок см. в разделе errno
, _doserrno
и _sys_errlist
_sys_nerr
.
Замечания
Функция _lseek
перемещает указатель файла, связанный с fd
новым расположением, из offset
байтов origin
. Следующая операция в файле выполняется в новом местоположении. Аргумент origin
должен быть одним из следующих констант, которые определены в Stdio.h.
Значение origin |
Description |
---|---|
SEEK_SET |
Начало файла. |
SEEK_CUR |
Текущая позиция указателя файла. |
SEEK_END |
Конец файла. |
С помощью функции _lseek
можно переместить указатель в любое место в файле или за его конец.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
_lseek |
<io.h> |
_lseeki64 |
<io.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Библиотеки
Все версии библиотек времени выполнения языка C.
Пример
// crt_lseek.c
/* This program first opens a file named lseek.txt.
* It then uses _lseek to find the beginning of the file,
* to find the current position in the file, and to find
* the end of the file.
*/
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <share.h>
int main( void )
{
int fh;
long pos; /* Position of file pointer */
char buffer[10];
_sopen_s( &fh, "crt_lseek.c_input", _O_RDONLY, _SH_DENYNO, 0 );
/* Seek the beginning of the file: */
pos = _lseek( fh, 0L, SEEK_SET );
if( pos == -1L )
perror( "_lseek to beginning failed" );
else
printf( "Position for beginning of file seek = %ld\n", pos );
/* Move file pointer a little */
_read( fh, buffer, 10 );
/* Find current position: */
pos = _lseek( fh, 0L, SEEK_CUR );
if( pos == -1L )
perror( "_lseek to current position failed" );
else
printf( "Position for current position seek = %ld\n", pos );
/* Set the end of the file: */
pos = _lseek( fh, 0L, SEEK_END );
if( pos == -1L )
perror( "_lseek to end failed" );
else
printf( "Position for end of file seek = %ld\n", pos );
_close( fh );
}
Входные данные: crt_lseek.c_input
Line one.
Line two.
Line three.
Line four.
Line five.
Выходные данные
Position for beginning of file seek = 0
Position for current position seek = 10
Position for end of file seek = 57