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


_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 для указания на ошибку. Если передается недопустимый параметр, например, недопустимый идентификатор файла, недопустимое значение для origin или позиция, указанная offset, находится перед началом файла, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, эти функции устанавливают для errno значение EBADF и возвращают -1L. Для устройств, не способных искать (например терминалы и принтер), возвращаемое значение не определено.

Дополнительные сведения об этих и других кодах ошибок см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr.

Заметки

Функция _lseek перемещает указатель файла, связанный с fd, в новое расположение — offset байтов от origin. Следующая операция в файле происходит в новом расположении. Аргумент origin должен быть одной из следующих констант, определенных в Stdio.h.

  • SEEK_SET
    Начало файла.

  • SEEK_CUR
    Текущая позиция указателя файла.

  • SEEK_END
    Конец файла.

Можно использовать _lseek для перемещения указателя в любое расположение файла или за пределы файла.

Требования

Подпрограмма

Обязательный заголовок

_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 );
}

Input: crt_lseek.c_input

Line one.
Line two.
Line three.
Line four.
Line five.

Output

Position for beginning of file seek = 0
Position for current position seek = 10
Position for end of file seek = 57

См. также

Ссылки

Низкоуровневый ввод-вывод

fseek, _fseeki64

_tell, _telli64