fseek, _fseeki64
Move o ponteiro de arquivo em um local especificado.
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Parâmetros
stream
Ponteiro a estrutura de FILE .offset
Número de bytes de origin.origin
Posição inicial.
Valor de retorno
Se tiver êxito, fseek e retorna 0 de _fseeki64 . Caso contrário, retornará um valor diferente de zero. Dispositivos pôde buscar, o valor de retorno será indefinido. Se stream for um ponteiro nulo, ou se origin não for um dos valores permitidos descritos abaixo, fseek e _fseeki64 invoca o manipulador inválido do parâmetro, conforme descrito em Validação do parâmetro. Se a execução puder continuar, essas funções definirão errno para EINVAL e retornarão -1.
Comentários
fseek e _fseeki64 funcionam move o ponteiro de arquivo (se houver) associado a stream para um novo local que esteja bytes de offset de origin*.* A próxima operação no fluxo ocorre no novo local. Em um fluxo aberto para a atualização, a próxima operação pode ser uma leitura ou uma gravação. A origem do argumento deve ser uma das seguintes constantes, definido em STDIO.H:
SEEK_CUR
A posição atual do ponteiro de arquivo.SEEK_END
Fim de arquivo.SEEK_SET
Início do arquivo.
Você pode usar fseek e reposicionar _fseeki64 para o ponteiro em qualquer lugar em um arquivo. O ponteiro também pode ser posicionado antes do final do arquivo. fseek e _fseeki64desmarque o indicador de participante de Arquivo e negações o efeito de todas as chamadas anteriores de ungetc em stream.
Quando um arquivo é aberto com dados, a posição atual do arquivo é determinada pela última operação de E/S, não por onde a gravação seguinte ocorrerá. Se nenhuma operação de E/S ocorreu ainda em um arquivo aberto, anexando a posição do arquivo é o início do arquivo.
Para os fluxos abertos no modo de texto, fseek e _fseeki64têm uso limitado, porque as traduções de retorno- avanço de linha de carro podem causar fseek e _fseeki64a resultados inesperados. As únicas fseek e operaçõesde _fseeki64garantia do para trabalhar em fluxos abertos no modo de texto são:
Buscar com um deslocamento de 0 em relação a qualquer um dos valores de origem.
Buscar desde o início do arquivo com um valor de deslocamento retornado de uma chamada a ftell ao usar fseekou _ftelli64ao usar_fseeki64.
Também no modo de texto, CTRL+Z é interpretado como um caractere de participante de Arquivo na entrada. Em arquivos abertos leitura/gravação, fopen e qualquer verificação de rotinas relacionada para um CTRL+Z no final do arquivo e solte-o se possível. Isso é feito como usar a combinação de fseek e ftellou_fseeki64 e _ftelli64, para se mover dentro de um arquivo que termina com um CTRL+Z pode fazer com que fseek ou _fseeki64 se comportem de forma incorreta próximo do fim do arquivo.
Quando o CRT abre um arquivo que começa com uma marca de ordem de byte (BOM), o ponteiro de arquivo é posicionado após a BOM (isto é, no início do conteúdo real do arquivo). Se você tiver que fseek ao início do arquivo, use ftell ele obter a posição inicial e fseek em vez de para posicionar 0.
Essa função bloqueia out outros threads durante a execução e em virtude disso é seguro para threads. Para uma versão sem bloqueio, consulte _fseek_nolock, _fseeki64_nolock.
Requisitos
Função |
Cabeçalho necessário |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Para informações adicionais de compatibilidade, consulte Compatibilidade na Introdução.
Exemplo
// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.
#include <stdio.h>
int main( void )
{
FILE *stream;
char line[81];
int result;
if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
{
printf( "The file fseek.out was not opened\n" );
return -1;
}
fprintf( stream, "The fseek begins here: "
"This is the file 'fseek.out'.\n" );
result = fseek( stream, 23L, SEEK_SET);
if( result )
perror( "Fseek failed" );
else
{
printf( "File pointer is set to middle of first line.\n" );
fgets( line, 80, stream );
printf( "%s", line );
}
fclose( stream );
}