Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

ftell, ftello, ftell64, ftello64 - Aktuelle Position des Lese-/Schreibzeigers ermitteln

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

long ftell(FILE *dz);
off_t ftello(FILE *dz);
long long ftell64(FILE *dz);
off64_t ftello64(FILE *dz);

ftell/ftello und ftell64/ftello64 liefern die aktuelle Position des Lese-/Schreibzeigers für die Datei mit Dateizeiger dz.

ftell/ftello und ftell64/ftello64 lassen sich auf Binärdateien (SAM im Binärmodus, PAM, INCORE) und Textdateien (SAM im Textmodus, ISAM) anwenden.

Für die Bearbeitung von Dateien > 2 GB verfahren Sie wie folgt:

  • Falls das Define _FILE_OFFSET_BITS 64 (siehe "Unterstützung von DVS- und UFS-Dateien > 2 GB") gesetzt ist, rufen Sie ftello auf. Implizit wird dann ftello64 mit den passenden Parametern verwendet.
    Die automatische Umsetzung für ftell wird nicht unterstützt.

  • Andernfalls müssen Sie ftell64 bzw. ftello64 aufrufen.

Es besteht kein funktionaler Unterschied zwischen ftell und ftell64 bzw. ftello und ftello64. Die Funktionen unterscheiden sich nur hinsichtlich des für den Rückgabewert verwendeten Offset-Typs.

Returnwert

Position in der Datei bei Erfolg, und zwar



bei Binärdateien die Anzahl Bytes, die der Lese-/Schreibzeiger vom Dateianfang entfernt ist, bei Textdateien die absolute Position des Lese-/Schreibzeigers.


-1     

im Fehlerfall. Wenn der Wert für die Dateiposition nicht innerhalb des Wertebereichs des Rückgabetyps liegt, wird zusätzlich errno auf ERANGE gesetzt.

Hinweise

Auf die von ftell/ftello bzw. ftell64/ftello64 gelieferte Position kann mit den Funktionen fseek/fseeko bzw. fseek64/fseeko64 positioniert werden.

ftell/ftello und ftell64/ftello64 sind nicht anwendbar für Systemdateien (SYSDTA, SYSLST, SYSOUT).

Da die Informationen über die Dateiposition in einem Feld zusammengefasst werden, ergeben sich für die Größe von SAM- und ISAM-Dateien folgende Einschränkungen:

SAM-Datei


ftell()/ftello()

ftell64()/ftello64()

Satzlänge

<= 2048 Byte

<= 32 KByte

Satzanzahl/Block

<= 255

< 32 K

Blockanzahl

<= 2047

-

ISAM-Datei


ftell()/ftello()

ftell64()/ftello64()

Satzlänge

<= 32 KByte

<= 32 KByte

Satzanzahl

< 32 K

-

Beispiel

In folgendem Programm wird ab dem elften Zeichen jedes Zeichen von dat mit der Position des Lese-/Schreibzeigers ausgegeben (funktioniert nur mit Binärdateien).

#include <stdio.h>
int main(void)
{
   FILE *fp;
   int c;
   if((fp = fopen("dat","rb")) != NULL)
     {
               /* die ersten 10 Zeichen werden übersprungen */
       fseek(fp,10L,SEEK_SET);
       while((c=getc(fp)) != EOF)
            printf("Position : %ld, Zeichen : %c\n",ftell(fp),c);
       fclose(fp);
     }
   return 0;
}

Siehe auch

fseek, fseek64, fgetpos, fgetpos64, ftell, ftell64, tell