_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