Condividi tramite


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 usa fseek 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