Namespaces
Variants

fsetpos

From cppreference.net
< c ‎ | io
Definido en el encabezado <stdio.h>
int fsetpos ( FILE * stream, const fpos_t * pos ) ;

Establece el indicador de posición del archivo y el estado de análisis multibyte (si existe) para el flujo de archivo stream de acuerdo con el valor apuntado por pos .

Además de establecer un nuevo estado de análisis y posición, una llamada a esta función deshace los efectos de ungetc y borra el estado de fin de archivo, si está establecido.

Si ocurre un error de lectura o escritura, se activa el indicador de error ( ferror ) para el flujo.

Contenidos

Parámetros

stream - flujo de archivo a modificar
pos - puntero a un fpos_t objeto a utilizar como nuevo valor del indicador de posición del archivo

Valor de retorno

0 en caso de éxito, valor distinto de cero en caso contrario.

Notas

Después de posicionarse en una posición no final en un flujo ancho, la siguiente llamada a cualquier función de salida puede dejar el resto del archivo indefinido, por ejemplo, al generar una secuencia multibyte de una longitud diferente.

Ejemplo

fsetpos con verificación de errores

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    // Preparar un array de valores de punto flotante (FP).
    #define SIZE 5
    double A[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0};
    // Escribir el array en un archivo.
    FILE * fp = fopen("test.bin", "wb");
    fwrite(A,sizeof(double),SIZE,fp);
    fclose (fp);
    // Leer los valores FP en el array B.
    double B[SIZE];
    fp = fopen("test.bin","rb");
    fpos_t pos;
    if (fgetpos(fp, &pos)) // posición actual: inicio del archivo
    {
        perror("fgetpos()");
        fprintf(stderr, "fgetpos() falló en el archivo %s en la línea # %d\n",
                __FILE__, __LINE__ - 3);
        exit(EXIT_FAILURE);
    }
    int ret_code = fread(B,sizeof(double),1,fp); // leer un valor FP
    // posición actual: después de leer un valor de punto flotante
    printf("%.1f; recuento de lectura = %d\n", B[0], ret_code); // imprimir un valor FP y ret_code
    if (fsetpos(fp, &pos)) // restablecer posición actual al inicio del archivo
    {
        if (ferror(fp))
        {
            perror("fsetpos()");
            fprintf(stderr, "fsetpos() falló en el archivo %s en la línea # %d\n", __FILE__,
                    __LINE__ - 5);
            exit(EXIT_FAILURE);
        }
    }
    ret_code = fread(B, sizeof(double), 1, fp); // releer el primer valor FP
    printf("%.1f; recuento de lectura = %d\n", B[0], ret_code); // imprimir un valor FP y ret_code
    fclose(fp);
    return EXIT_SUCCESS;
}

Salida posible:

1.0; recuento de lectura = 1
1.0; recuento de lectura = 1

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.21.9.3 La función fsetpos (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.21.9.3 La función fsetpos (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.21.9.3 La función fsetpos (p: 337)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.19.9.3 La función fsetpos (p: 303)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.9.9.3 La función fsetpos

Véase también

obtiene el indicador de posición del archivo
(función)
retorna el indicador de posición actual del archivo
(función)
mueve el indicador de posición del archivo a una ubicación específica en un archivo
(función)
C++ documentation para fsetpos