ftell
, _ftelli64
Ruft die aktuelle Position eines Dateizeigers ab
Syntax
long ftell(
FILE *stream
);
__int64 _ftelli64(
FILE *stream
);
Parameter
stream
Zielstruktur von FILE
Rückgabewert
ftell
und _ftelli64
geben die aktuelle Dateiposition zurück. Der zurückgegebene ftell
Wert entspricht _ftelli64
möglicherweise nicht dem physischen Byte-Offset für Datenströme, die im Textmodus geöffnet wurden, da der Textmodus eine Wagenrücklaufvorschubübersetzung verursacht. Verwenden Sie die Verwendung ftell
mit fseek
oder _ftelli64
mit _fseeki64
der Rückkehr zu Dateispeicherorten ordnungsgemäß. On error, ftell
and _ftelli64
invoke the invalid parameter handler, as described in Parameter validation. Wenn die Ausführung fortgesetzt werden darf, geben diese Funktionen -1L zurück und legen errno
sie auf eine von zwei Konstanten fest, die in ERRNO.H
. Die EBADF
Konstante bedeutet, dass das stream
Argument kein gültiger Dateizeigerwert ist oder nicht auf eine geöffnete Datei verweist. EINVAL
bedeutet, dass ein ungültiges stream
-Argument an die Funktion übergeben wurde. Auf Geräten, die nicht suchen können (z. B. Terminals und Drucker), oder wenn stream
nicht auf eine geöffnete Datei verwiesen wird, ist der Rückgabewert nicht definiert.
Weitere Informationen zu Rückgabecodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Hinweise
Mit ftell
den Funktionen wird _ftelli64
die aktuelle Position des Dateizeigers (sofern vorhanden) abgerufen, der zugeordnet stream
ist. Die Position wird als ein Offset relativ zum Anfang des Streams ausgedrückt.
Wenn eine Datei zum Anfügen von Daten geöffnet wird, wird die aktuelle Dateiposition vom letzten E/A-Vorgang nicht dadurch bestimmt, wo der nächste Schreibvorgang erfolgt. Angenommen, eine Datei wird für eine Anfüge geöffnet, und der letzte Vorgang war ein Lesevorgang. Die Dateiposition ist der Punkt, an dem der nächste Lesevorgang gestartet würde, nicht an der Stelle, an der der nächste Schreibvorgang gestartet würde. (Wenn eine Datei zum Anfügen geöffnet wird, wird die Dateiposition vor einem Schreibvorgang an das Ende der Datei verschoben.) Wenn noch kein E/A-Vorgang für eine datei aufgetreten ist, die zum Anfügen geöffnet wurde, ist die Dateiposition der Anfang der Datei.
Im Textmodus wird STRG+Z in der Eingabe als Dateiendezeichen interpretiert. In für Lese-/Schreibvorgänge geöffneten Dateien, überprüfen fopen
und alle verknüpften Routinen das Dateiende auf STRG+Z und entfernt die Markierung, sofern möglich. Dies liegt daran, dass die Verwendung der Kombination aus ftell
und , fseek
oder _ftelli64
und _fseeki64
, um innerhalb einer Datei zu verschieben, die mit einem STRG+Z endet, zu einer fehlerhaften Verhaltensweise am Ende der Datei führen ftell
oder _ftelli64
verhalten.
Diese Funktion sperrt den aufrufenden Thread während der Ausführung und ist threadsicher. Eine nicht sperrende Version finden Sie unter _ftell_nolock
.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Funktion | Erforderlicher Header | Optionale Header |
---|---|---|
ftell |
<stdio.h> |
<errno.h> |
_ftelli64 |
<stdio.h> |
<errno.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// 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
Siehe auch
Stream-E/A
fopen
, _wfopen
fgetpos
fseek
, _fseeki64
_lseek
, _lseeki64