Namespaces
Variants

ftell

From cppreference.net
< c ‎ | io
Défini dans l'en-tête <stdio.h>
long ftell ( FILE * stream ) ;

Retourne l'indicateur de position du fichier pour le flux de fichier stream .

Si le flux est ouvert en mode binaire, la valeur obtenue par cette fonction est le nombre d'octets depuis le début du fichier.

Si le flux est ouvert en mode texte, la valeur retournée par cette fonction est non spécifiée et n'a de sens que comme entrée pour fseek() .

Table des matières

Paramètres

stream - flux de fichier à examiner

Valeur de retour

Indicateur de position du fichier en cas de succès ou - 1L en cas d'échec.

En cas d'erreur, la variable errno est définie à une valeur positive définie par l'implémentation.

Notes

Sur Windows, _ftelli64 peut être utilisé pour travailler avec des fichiers de plus de 2 Gio.

Exemple

Illustre l'utilisation de ftell() avec vérification des erreurs. Écrit puis lit quelques valeurs flottantes (FP) depuis/dans un fichier.

#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;
}

Sortie possible :

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

Références

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

Voir aussi

obtient l'indicateur de position du fichier
(fonction)
déplace l'indicateur de position du fichier vers un emplacement spécifique dans un fichier
(fonction)
déplace l'indicateur de position du fichier vers un emplacement spécifique dans un fichier
(fonction)