_lseek, _lseeki64

Move o ponteiro do arquivo para um local especificado.

Sintaxe

long _lseek(
   int fd,
   long offset,
   int origin
);
__int64 _lseeki64(
   int fd,
   __int64 offset,
   int origin
);

Parâmetros

fd
Descritor de arquivo que faz referência a um arquivo aberto.

offset
Número de bytes de origin.

origin
Posição inicial.

Valor retornado

_lseek retorna o deslocamento, em bytes, da nova posição desde o início do arquivo. _lseeki64 retorna o deslocamento em um inteiro de 64 bits. A função retorna -1L para indicar um erro. Se for passado um parâmetro inválido, como um descritor de arquivo inválido, ou o valor for origin for inválido ou a posição especificada por offset for anterior ao início do arquivo, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essas funções definirão errno como EBADF e retornarão -1L. Em dispositivos incapazes de fazer buscas (como terminais e impressoras), o valor retornado será indefinido.

Para obter mais informações sobre esses e outros códigos de erro, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

Comentários

A _lseek função move o ponteiro do arquivo associado a fd um novo local que é offset bytes de origin. A operação seguinte no arquivo ocorre no novo local. O origin argumento deve ser uma das seguintes constantes, que são definidas em Stdio.h.

origin valor Descrição
SEEK_SET Início do arquivo.
SEEK_CUR Posição atual do ponteiro de arquivo.
SEEK_END Final do arquivo.

É possível utilizar _lseek para reposicionar o ponteiro em qualquer lugar do arquivo ou após o final do arquivo.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Requisitos

Rotina Cabeçalho necessário
_lseek <io.h>
_lseeki64 <io.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Bibliotecas

Todas as versões das bibliotecas em tempo de execução C.

Exemplo

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

Entrada: crt_lseek.c_input

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

Saída

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

Confira também

E/S de baixo nível
fseek, _fseeki64
_tell, _telli64