fsetpos
|
Definido en el encabezado
<stdio.h>
|
||
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
|
|