Subrutina fseek, fseeko, fseeko64, rewind, ftell, ftello, ftello64, fgetpos, fgetpos64, fsetpos o fsetpos64
Finalidad
Vuelve a situar el puntero de archivo de una corriente.
Biblioteca
Biblioteca C estándar (libc.a)
Sintaxis
#include <stdio.h>
void rewind (Stream)
FILE *Stream; long int ftell (Stream)
FILE *Stream; int fgetpos (Stream, Position)
FILE *Stream;
fpos_t *Position;
off_t int ftello (Stream)
FILE *Stream; off64_t int ftello64 (Stream)
FILE *Stream; int fgetpos64 (Stream, Position)
FILE *Stream;
fpos64_t *Position;
Descripción
Las subrutinas fseek, fseeko y fseeko64 establecen la posición de la siguiente operación de entrada o salida en la corriente de E/S especificada por el parámetro Stream. La posición si la siguiente operación viene determinada por el parámetro Offset , que puede ser positivo o negativo.
Las subrutinas fseek, fseeko y fseeko64 establecen el puntero de archivo asociado con el Corriente especificado de la siguiente manera:
- Si el parámetro Whence se establece en el valor SEEK_SET , el puntero se establece en el valor del parámetro Offset .
- Si el parámetro Whence se establece en el valor SEEK_CUR , el puntero se establece en su ubicación actual más el valor del parámetro Offset .
- Si el parámetro Whence se establece en el valor SEEK_END , el puntero se establece en el tamaño del archivo más el valor del parámetro Offset .
La subrutina fseek, fseekoy fseeko64 no tienen éxito si se intenta en un archivo que no se ha abierto utilizando la subrutina fopen . En concreto, la subrutina fseek no se puede utilizar en un terminal o en un archivo abierto con la subrutina popen . Las subrutinas fseek y fseeko también fallarán cuando el desplazamiento resultante sea mayor que el que se pueda devolver correctamente.
La subrutina rebobinado equivale a llamar a la subrutina fseek utilizando valores de parámetro de(Corriente, SEEK_SET, SEEK_SET), excepto que la subrutina rebobinado no devuelve un valor. No utilice la subrutina rebobinado en situaciones en las que la subrutina fseek puede fallar (por ejemplo, cuando se utiliza la subrutina fseek con corrientes de E/S en almacenamiento intermedio). En este caso, utilice la subrutina fseek , por lo que se pueden comprobar las condiciones de error.
Las subrutinas fseek, fseeko, fseeko64 y rebobinado deshacen cualquier efecto de las subrutinas ungetc y ungetwc y borran el indicador de fin de archivo (EOF) en la misma corriente.
La función fseek, fseekoy fseeko64 permite establecer el indicador de posición de archivo más allá del final de los datos existentes en el archivo. Si los datos se escriben más tarde en este punto, las lecturas subsiguientes de datos en el gap devolverán bytes del valor 0 hasta que los datos se escriban realmente en la brecha.
Una llamada satisfactoria a las subrutinas fsetpos o fsetpos64 borra el indicador EOF y deshace los efectos de las subrutinas ungetc y ungetwc .
Después de una subrutina fseek, fseeko, fseeko64 o rebobinado , la siguiente operación en un archivo abierto para la actualización puede ser de entrada o de salida.
Las subrutinas ftell, ftello y ftello64 devuelven el valor actual de posición del indicador de posición de archivo para la corriente a la que apunta el parámetro Corriente . ftell y ftello fallarán si el desplazamiento resultante es mayor que el que se puede devolver correctamente.
Las subrutinas fgetpos y fgetpos64 almacenan el valor actual del indicador de posición de archivo para la corriente a la que apunta el parámetro Corriente en el objeto al que apunta el parámetro Posición . fsetpos y fsetpos64 establecen el indicador de posición de archivo para Corriente de acuerdo con el valor del parámetro Posición , que debe ser el resultado de una llamada previa a la subrutina fgetpos o fgetpos64 . fgetpos y fsetpos fallarán si el desplazamiento resultante es mayor que el que se puede devolver correctamente.
Parámetros
| Elemento | Descripción |
|---|---|
| Flujo | Especifica la corriente de entrada/salida (E/S). |
| Desplazamiento | Determina la posición de la siguiente operación. |
| whence | Determina el valor del puntero de archivo asociado al parámetro Corriente . |
| Posición | Especifica el valor del indicador de posición de archivo. |
Valores de retorno
Tras la finalización satisfactoria, la subrutina fseek, fseeko y fseeko64 devuelve un valor de 0. En caso contrario, devuelve el valor -1.
Tras la finalización satisfactoria, la subrutina ftell, ftello y ftello64 devuelve el desplazamiento del byte actual relativo al principio del archivo asociado con la corriente especificada. En caso contrario, se devuelve un valor long int de -1 y se establece la variable global errno.
Tras la finalización satisfactoria, las subrutinas fgetpos, fgetpos64, fsetpos y fsetpos64 devuelven un valor de 0. De lo contrario, se devuelve un valor distinto de cero y la variable global errno se establece en el error específico.
Códigos de error
Si las subrutinas fseek, fseeko, fseeko64, ftell, ftelloo ftello64 no tienen éxito porque la corriente se desalmacena o el almacenamiento intermedio de corriente debe vaciarse y la llamada a la subrutina hace que se invoque una subrutina lseek o Escribir subyacente, devuelve uno o más de los siguientes códigos de error:
| Elemento | Descripción |
|---|---|
| FEAGA | Indica que el distintivo O_NONBLOCK está establecido para el descriptor de archivo, lo que retrasa el proceso en la operación de grabación. |
| EBADF | Indica que el descriptor de archivo subyacente al parámetro Corriente no está abierto para escritura. |
| EFBIG | Indica que se ha intentado grabar en un archivo que excede el límite de tamaño de archivo del proceso o el tamaño máximo de archivo. |
| EFBIG | Indica que el archivo es un archivo normal y que se ha intentado escribir en o más allá del máximo de desplazamiento asociado con la corriente correspondiente. |
| EINTR | Indica que la operación de grabación se ha terminado porque el proceso ha recibido una señal y no se ha transferido ningún dato, o la implementación no informa de transferencias parciales para este archivo. |
| EIO | Indica que el proceso es un miembro de un grupo de procesos en segundo plano que intenta realizar una subrutina Escribir en su terminal de control, el distintivo TOSTOP está establecido, el proceso no pasa por alto ni bloquea la señal SIGTTOU y el grupo de procesos del proceso se ha quedado huérfano. Este error también se puede devolver en condiciones dependientes de la implementación. |
| ENOSPC | Indica que no existe espacio libre restante en el dispositivo que contiene el archivo. |
| EPIPE | Indica que se ha intentado grabar en un conducto o FIFO que no está abierto para su lectura por ningún proceso. También se enviará una señal SIGPIPE al proceso. |
| EINVAL | Indica que el parámetro Whence no es válido. El indicador de posición de archivo resultante se establecerá en un valor negativo. El código de error de EINVAL no se aplica a las subrutinas ftell y rebobinado . |
| ESPIPE | Indica que el descriptor de archivo subyacente al parámetro Corriente está asociado a un conducto, FIFO o socket. |
| EVERFLOW | Indica que para fseek, el desplazamiento de archivo resultante sería un valor que no se puede representar correctamente en un objeto de tipo Largo. |
| EVERFLOW | Indica que para fseeko, el desplazamiento de archivo resultante sería un valor que no se puede representar correctamente en un objeto de tipo of_t. |
| ENXIO | Indica que se ha realizado una solicitud de un dispositivo inexistente o que la solicitud estaba fuera de las posibilidades del dispositivo. |
Las subrutinas fgetpos y fsetpos no tienen éxito debido a las siguientes condiciones:
| Elemento | Descripción |
|---|---|
| EINVAL | Indica que el parámetro Corriente o Posición no es válido. El código de error de EINVAL no se aplica a la subrutina fgetpos . |
| EBADF | Indica que el descriptor de archivo subyacente al parámetro Corriente no está abierto para escritura. |
| ESPIPE | Indica que el descriptor de archivo subyacente al parámetro Corriente está asociado a un conducto, FIFO o socket. |
Las subrutinas fseek, fseeko, ftell, ftello, fgetposy fsetpos no tienen éxito bajo la condición siguiente:
| Elemento | Descripción |
|---|---|
| EVERFLOW | El resultado no se ha podido devolver correctamente. |