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_errlist
e _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