std:: fsetpos
|
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
|
|