fseek
, _fseeki64
Sposta il puntatore del file in una posizione specificata.
Sintassi
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Parametri
stream
Puntatore alla struttura FILE
.
offset
Numero di byte da origin
.
origin
Posizione iniziale.
Valore restituito
Se l'esito è positivo, fseek
e _fseeki64
restituiscono 0. In caso contrario, viene restituito un valore diverso da zero. Nei dispositivi che non supportano la ricerca, il valore restituito è indefinito. Se stream
è un puntatore Null o se origin
non è uno dei valori consentiti descritti di seguito fseek
e _fseeki64
richiamare il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni impostano errno
su EINVAL
e restituiscono -1.
Osservazioni:
Le fseek
funzioni e _fseeki64
spostano il puntatore del file (se presente) associato a stream
un nuovo percorso byte offset
da origin
. L'operazione successiva nel flusso viene eseguita nella nuova posizione. In un flusso aperto per l'aggiornamento, l'operazione successiva può essere un'operazione di lettura o scrittura. L'argomento origin
deve essere una delle costanti seguenti, definite in STDIO.H
:
valore di origine | significato |
---|---|
SEEK_CUR |
Posizione corrente del puntatore del file. |
SEEK_END |
Fine del file. |
SEEK_SET |
Inizio del file. |
È possibile usare fseek
e _fseeki64
per riposizionare il puntatore in qualsiasi punto in un file. Il puntatore può essere posizionato anche oltre la fine del file. fseek
e _fseeki64
cancella l'indicatore di fine del file e nega l'effetto di qualsiasi chiamata precedente ungetc
a stream
.
Quando un file viene aperto per l'accodamento dei dati, la posizione corrente nel file è determinata dall'ultima operazione di I/O e non dalla posizione in cui si verificherà la scrittura successiva. Se non è ancora stata eseguita alcuna operazione di I/O su un file aperto per l'accodamento, la posizione nel file è l'inizio del file.
Per i flussi aperti in modalità fseek
testo e _fseeki64
hanno un uso limitato, perché le traduzioni dei feed di ritorno a capo possono causare fseek
e _fseeki64
produrre risultati imprevisti. Le uniche fseek
operazioni e _fseeki64
che funzionano sui flussi aperti in modalità testo sono:
Ricerca con offset 0 rispetto a qualsiasi valore di origine.
Ricerca dall'inizio del file con un valore di offset restituito da una chiamata a
ftell
quando si usafseek
o_ftelli64
quando si usa_fseeki64
.
In modalità testo, inoltre, CTRL+Z viene interpretato nell'input come un carattere di fine file. Nei file aperti per la lettura/scrittura, fopen
e tutte le routine correlate verificano la presenza della combinazione CTRL+Z alla fine del file e la rimuovono, se possibile. Viene rimosso perché l'uso della combinazione di fseek
e ftell
o _fseeki64
e _ftelli64
, per spostarsi all'interno di un file che termina con CTRL+Z può causare fseek
o _fseeki64
comportarsi in modo non corretto vicino alla fine del file.
Quando il CRT apre un file che inizia con un byte Order Mark (BOM), il puntatore del file viene posizionato dopo la distinta base. Ovvero, viene posizionato all'inizio del contenuto effettivo del file. Se è necessario accedere fseek
all'inizio del file, usare ftell
per ottenere la posizione iniziale e quindi fseek
in tale posizione anziché posizionare 0.
Questa funzione blocca altri thread durante l'esecuzione e pertanto è thread-safe. Per una versione non di blocco, vedere _fseek_nolock
, _fseeki64_nolock
.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Funzione | Intestazione obbligatoria |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// 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 );
}
File pointer is set to middle of first line.
This is the file 'fseek.out'.
Vedi anche
I/O di flusso
fopen
, _wfopen
ftell
, _ftelli64
_lseek
, _lseeki64
rewind