Namensräume
Varianten
Aktionen

ftell

Von cppreference.com
< c‎ | io
 
 
Datei-Ein-/Ausgabe
Typen und Objekte
        
Funktionen
Datei-Zugriff
(C95)
Unformatierte Ein-/Ausgabe
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Formatierte Eingabe
Direkte Ein-/Ausgabe
Formatierte Ausgabe
Dateipositionierung
ftell
Fehlerbehandlung
Operationen auf Dateien
 
Definiert in Header <stdio.h>
long ftell( FILE* stream );

Gibt den Dateipositionierungsindikator für den Dateistream stream zurück.

Wenn der Stream im Binärmodus geöffnet ist, ist der von dieser Funktion erhaltene Wert die Anzahl der Bytes vom Anfang der Datei.

Wenn der Stream im Textmodus geöffnet ist, ist der von dieser Funktion zurückgegebene Wert undefiniert und nur als Eingabe für fseek() sinnvoll.

Inhalt

[bearbeiten] Parameter

stream - zu untersuchender Dateistream

[bearbeiten] Rückgabewert

Dateipositionierungsindikator bei Erfolg oder -1L bei Fehler.

Bei einem Fehler wird die Variable errno auf einen implementierungsdefinierten positiven Wert gesetzt.

[bearbeiten] Hinweise

Unter Windows kann _ftelli64 verwendet werden, um mit Dateien zu arbeiten, die größer als 2 GiB sind.

[bearbeiten] Beispiel

Demonstriert ftell() mit Fehlerprüfung. Schreibt dann einige Fließkommazahlen (FP) in/aus einer Datei und liest sie.

#include <stdio.h>
#include <stdlib.h>
 
/* If the condition is not met then exit the program with error message. */
void check(_Bool condition, const char* func, int line)
{
    if (condition)
        return;
    perror(func);
    fprintf(stderr, "%s failed in file %s at line # %d\n", func, __FILE__, line - 1);
    exit(EXIT_FAILURE);
}
 
int main(void)
{
    /* Prepare an array of FP values. */
    #define SIZE 5
    double A[SIZE] = {1.1, 2.0, 3.0, 4.0, 5.0};
 
    /* Write array to a file. */
    const char* fname = "/tmp/test.bin";
    FILE* file = fopen(fname, "wb");
    check(file != NULL, "fopen()", __LINE__);
 
    const int write_count = fwrite(A, sizeof(double), SIZE, file);
    check(write_count == SIZE, "fwrite()", __LINE__);
 
    fclose(file);
 
    /* Read the FP values into array B. */
    double B[SIZE];
    file = fopen(fname, "rb");
    check(file != NULL, "fopen()", __LINE__);
 
    long int pos = ftell(file); /* position indicator at start of file */
    check(pos != -1L, "ftell()", __LINE__);
    printf("pos: %ld\n", pos);
 
    const int read_count = fread(B, sizeof(double), 1, file); /* read one FP value */
    check(read_count == 1, "fread()", __LINE__);
 
    pos = ftell(file); /* position indicator after reading one FP value */
    check(pos != -1L, "ftell()", __LINE__);
    printf("pos: %ld\n", pos);
    printf("B[0]: %.1f\n", B[0]); /* print one FP value */
 
    return EXIT_SUCCESS;
}

Mögliche Ausgabe

pos: 0
pos: 8
B[0]: 1.1

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.21.9.4 Die Funktion ftell (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.21.9.4 Die Funktion ftell (p: TBD)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.21.9.4 Die Funktion ftell (p: 337-338)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.19.9.4 Die Funktion ftell (p: 303-304)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.9.9.4 Die Funktion ftell

[bearbeiten] Siehe auch

holt den Dateipositionierungsindikator
(Funktion) [bearbeiten]
verschiebt den Dateipositionierungsindikator an eine bestimmte Stelle in einer Datei
(Funktion) [bearbeiten]
verschiebt den Dateipositionierungsindikator an eine bestimmte Stelle in einer Datei
(Funktion) [bearbeiten]