Condividi tramite


ftell, _ftelli64

Ottiene la posizione corrente di un puntatore del file.

Sintassi

long ftell(
   FILE *stream
);
__int64 _ftelli64(
   FILE *stream
);

Parametri

stream
Struttura FILE di destinazione.

Valore restituito

ftell e _ftelli64 restituiscono la posizione corrente del file. Il valore restituito da ftell e _ftelli64 potrebbe non riflettere l'offset di byte fisico per i flussi aperti in modalità testo, perché la modalità testo causa la conversione del feed di ritorno a capo della riga. Usare ftell con fseek o _ftelli64 con _fseeki64 per tornare correttamente ai percorsi dei file. In caso di errore ftell e _ftelli64 richiamare il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono -1L e impostano errno su una delle due costanti definite in ERRNO.H. La EBADF costante indica che l'argomento stream non è un valore del puntatore di file valido o non fa riferimento a un file aperto. EINVAL indica che è stato passato un argomento stream non valido alla funzione. Nei dispositivi incapace di cercare (ad esempio terminali e stampanti) o quando stream non fa riferimento a un file aperto, il valore restituito non è definito.

Per altre informazioni sui codici restituiti, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Osservazioni:

Le ftell funzioni e _ftelli64 recuperano la posizione corrente del puntatore al file (se presente) associato a stream. La posizione viene espressa come offset rispetto all'inizio del flusso.

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. Si supponga, ad esempio, che un file venga aperto per un accodamento e che l'ultima operazione sia stata letta. La posizione del file è il punto in cui verrà avviata l'operazione di lettura successiva, non dove verrà avviata la scrittura successiva. Quando un file viene aperto per l'accodamento, la posizione del file viene spostata alla fine del file prima di qualsiasi operazione di scrittura. Se non si è ancora verificata alcuna operazione di I/O in un file aperto per l'accodamento, la posizione del file corrisponde all'inizio del file.

In modalità testo 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. È dovuto al fatto che l'uso della combinazione di ftell e fseek, o _ftelli64 e _fseeki64, per spostarsi all'interno di un file che termina con CTRL+Z può causare ftell o _ftelli64 comportarsi in modo non corretto vicino alla fine del file.

Questa funzione blocca il thread chiamante durante l'esecuzione e pertanto è thread-safe. Per una versione che non blocca il thread, vedere _ftell_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 Intestazioni facoltative
ftell <stdio.h> <errno.h>
_ftelli64 <stdio.h> <errno.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

// crt_ftell.c
// This program opens a file named CRT_FTELL.C
// for reading and tries to read 100 characters. It
// then uses ftell to determine the position of the
// file pointer and displays this position.

#include <stdio.h>

FILE *stream;

int main( void )
{
   long position;
   char list[100];
   if( fopen_s( &stream, "crt_ftell.c", "rb" ) == 0 )
   {
      // Move the pointer by reading data:
      fread( list, sizeof( char ), 100, stream );
      // Get position after read:
      position = ftell( stream );
      printf( "Position after trying to read 100 bytes: %ld\n",
              position );
      fclose( stream );
   }
}
Position after trying to read 100 bytes: 100

Vedi anche

I/O di flusso
fopen, _wfopen
fgetpos
fseek, _fseeki64
_lseek, _lseeki64