Namespaces
Variants

ftell

From cppreference.net
< c ‎ | io
Definido en el encabezado <stdio.h>
long ftell ( FILE * stream ) ;

Devuelve el indicador de posición del archivo para el flujo de archivo stream .

Si el flujo está abierto en modo binario, el valor obtenido por esta función es el número de bytes desde el inicio del archivo.

Si el flujo está abierto en modo texto, el valor devuelto por esta función no está especificado y solo es significativo como entrada para fseek() .

Contenidos

Parámetros

stream - flujo de archivo a examinar

Valor de retorno

Indicador de posición de archivo en caso de éxito o - 1L si ocurre un fallo.

En caso de error, la variable errno se establece a un valor positivo definido por la implementación.

Notas

En Windows, _ftelli64 puede utilizarse para trabajar con archivos mayores a 2 GiB.

Ejemplo

Demuestra ftell() con verificación de errores. Escribe y luego lee algunos valores de punto flotante (FP) desde/hacia un archivo.

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

Salida posible:

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

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.21.9.4 La función ftell (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.21.9.4 La función ftell (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.21.9.4 La función ftell (p: 337-338)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.19.9.4 La función ftell (p: 303-304)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.9.9.4 La función ftell

Véase también

obtiene el indicador de posición del archivo
(función)
mueve el indicador de posición del archivo a una ubicación específica en un archivo
(función)
mueve el indicador de posición del archivo a una ubicación específica en un archivo
(función)