Namespaces
Variants

std:: fsetpos

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

Establece el indicador de posición de archivo y el estado de análisis multibyte (si existe) para el flujo de archivo C 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 std::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 ( std::ferror ) para el flujo.

Contenidos

Parámetros

stream - flujo de archivo a modificar
pos - puntero a un objeto fpos_t obtenido de std::fgetpos llamado en un flujo asociado con el mismo archivo

Valor de retorno

0 en caso de éxito, valor distinto de cero en caso contrario. Además, establece errno en caso de fallo.

Notas

Después de buscar una posición que no sea el 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

#include <cstdio>
#include <cstdlib>
int main()
{
    // Preparar un arreglo de valores de punto flotante.
    const int SIZE = 5;
    double A[SIZE] = {1., 2., 3., 4., 5.};
    // Escribir el arreglo a un archivo.
    std::FILE * fp = std::fopen("test.bin", "wb");
    std::fwrite(A, sizeof(double), SIZE, fp);
    std::fclose(fp);
    // Leer los valores en el arreglo B.
    double B[SIZE];
    fp = std::fopen("test.bin", "rb");
    std::fpos_t pos;
    if (std::fgetpos(fp, &pos) != 0)      // posición actual: inicio del archivo
    {
       std::perror("fgetpos()");
       std::fprintf(stderr, "fgetpos() failed in file %s at line # %d\n",
                    __FILE__, __LINE__-3);
       std::exit(EXIT_FAILURE);
    }
    int ret_code = std::fread(B, sizeof(double), 1, fp);      // leer un valor
    // posición actual: después de leer un valor
    std::printf("%.1f; read count = %d\n", B[0], ret_code);   // imprimir un valor y ret_code
    if (std::fsetpos(fp, &pos) != 0)   // restablecer posición actual al inicio del archivo
    {
       if (std::ferror(fp))
       {
          std::perror("fsetpos()");
          std::fprintf(stderr, "fsetpos() failed in file %s at line # %d\n",
                       __FILE__, __LINE__-5);
          std::exit(EXIT_FAILURE);
       }
    }
    ret_code = std::fread(B, sizeof(double), 1, fp);         // releer el primer valor
    std::printf("%.1f; read count = %d\n", B[0], ret_code);  // imprimir un valor y ret_code
    std::fclose(fp);
    return EXIT_SUCCESS; 
}

Salida:

1.0; read count = 1
1.0; read count = 1

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)
Documentación C para fsetpos