Поделиться через


_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

См. также

Низкоуровневый ввод-вывод
fseek, _fseeki64
_tell, _telli64