Definido en el encabezado
intfseek( FILE *stream,long offset,int origin );

Establece el indicador de posición del archivo para la secuencia de archivos. stream al valor señalado por offset.

Si el stream está abierto en modo binario, la nueva posición es exactamente offset bytes medidos desde el principio del archivo si origin es SEEK_SET, desde la posición actual del archivo si origin es SEEK_CUR, y desde el final del archivo si origin es SEEK_END. No es necesario que los flujos binarios admitan SEEK_END, en particular si es adicional null se emiten bytes.

Si el stream está abierto en modo texto, los únicos valores admitidos para offset son cero (que funciona con cualquier origin) y un valor devuelto por una llamada anterior a ftell en una secuencia asociada con el mismo archivo (que solo funciona con origin de SEEK_SET).

Si el stream es de orientación amplia, se aplican las restricciones de secuencias de texto y binarias (resultado de ftell se permite con SEEK_SET y se permite el desplazamiento cero desde SEEK_SET y SEEK_CUR, pero no SEEK_END).

Además de cambiar el indicador de posición del archivo, fseek deshace los efectos de ungetc y borra el estado de fin de archivo, si corresponde.

Si se produce un error de lectura o escritura, el indicador de error de la secuencia (ferror) está configurado y la posición del archivo no se ve afectada.

Parámetros

Arroyo flujo de archivos para modificar
compensar número de caracteres para cambiar la posición relativa al origen
origen posición a la que offset está agregado. Puede tener uno de los siguientes valores: SEEK_SET, SEEK_CUR, SEEK_END

Valor devuelto

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

Notas

Después de buscar una posición no final en una secuencia amplia, la siguiente llamada a cualquier función de salida puede hacer que el resto del archivo no esté definido, por ejemplo, generando una secuencia multibyte de una longitud diferente.

Para flujos de texto, los únicos valores válidos de offset están ​0​ (aplicable a cualquier origin) y un valor devuelto por una llamada anterior a ftell (solo aplicable a SEEK_SET).

POSIX permite buscar más allá del final del archivo existente. Si se realiza una salida después de esta búsqueda, cualquier lectura del intervalo devolverá cero bytes. Donde sea compatible con el sistema de archivos, esto crea un archivo disperso.

POSIX también requiere que fseek primero realice fflush si hay datos no escritos (pero si el estado de cambio se restaura está definido por la implementación).

Ejemplo

fseek con comprobación de errores.

#include#includeintmain(void)/* Prepare an array of f-p values. */#defineSIZE5double A[SIZE]=1.,2.,3.,4.,5.;/* Write array to a file. */
    FILE * fp =fopen("test.bin","wb");fwrite(A,sizeof(double),SIZE,fp);fclose(fp);/* Read the f-p values into array B. */double B[SIZE];
    fp =fopen("test.bin","rb");/* Set the file position indicator in front of third f-p value. */if(fseek(fp,sizeof(double)*2L,SEEK_SET)!=0)if(ferror(fp))perror("fseek()");fprintf(stderr,"fseek() failed in file %s at line # %dn",__FILE__,__LINE__-5);exit(EXIT_FAILURE);int ret_code =fread(B,sizeof(double),1,fp);/* read one f-p value  */printf("%.1fn", B[0]);/* print one f-p value */fclose(fp);return EXIT_SUCCESS;

Producción:

3.0

Referencias

  • Estándar C11 (ISO / IEC 9899: 2011):
    • 7.21.9.2 La función fseek (p: 336-337)
  • Estándar C99 (ISO / IEC 9899: 1999):
    • 7.19.9.2 La función fseek (p: 302-303)
  • Estándar C89 / C90 (ISO / IEC 9899: 1990):
    • 4.9.9.2 La función fseek

Ver también

fsetpos mueve el indicador de posición del archivo a una ubicación específica en un archivo
(función)
fgetpos obtiene el indicador de posición del archivo
(función)
ftell devuelve el indicador de posición de archivo actual
(función)
rebobinar mueve el indicador de posición de archivo al principio de un archivo
(función)