Foros del Web » Programación para mayores de 30 ;) » C/C++ »

duda con funcion fseek en c

Estas en el tema de duda con funcion fseek en c en el foro de C/C++ en Foros del Web. alguien me podria decir el concepto , para que sirve, y que hace esta funcion que es sobre archivos binarios? fseek(nombrearchivo, i * sizeof(int) ,SEEK_SET);...
  #1 (permalink)  
Antiguo 09/10/2013, 11:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 13 años, 7 meses
Puntos: 0
duda con funcion fseek en c

alguien me podria decir el concepto , para que sirve, y que hace
esta funcion que es sobre archivos binarios?

fseek(nombrearchivo, i * sizeof(int) ,SEEK_SET);
  #2 (permalink)  
Antiguo 09/10/2013, 12:07
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: duda con funcion fseek en c

Corre el puntero de lectura del archivo indicado x bytes desde una posicion determinada. En tu codigo el archivo es 'nombrearchivo', y avanza 'i*sizeof(int)' bytes a partir del principio del archivo (SEEK_SET). Retorna 0 si la operacion se completó con exito y !=0 si hubo algun error (en ese caso puedes recuperar el codigo de error con ferror).

Hay otras posiciones de inicio predefinidas: SEEK_CUR (que es la posicion inicial), y SEEK_END que es el final del archivo. P.ej. si quieres situarte al final del archivo saltas 0 bytes desde el final

Saludos
vosk
  #3 (permalink)  
Antiguo 09/10/2013, 13:30
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: duda con funcion fseek en c

con SEEK_END empezas desde el final hasta llegar al inicio?
  #4 (permalink)  
Antiguo 09/10/2013, 14:41
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: duda con funcion fseek en c

No, SEEK_xxx es la posicion desde la que comienza el avance, pero el avance puede ser negativo. Si avanzas -1 desde SEEK_END moveras el puntero a la penultima posicion, si avanzas 1 desde SEEK_END moveras el puntero mas allá del EOF pero no te marcará ningun error.

El SEEK_END podras verlo muchas veces como parte de una funcion que determina el tamaño de un archivo a partir de un manejador:

Código C:
Ver original
  1. size_t get_file_size(FILE *handle) {
  2.     size_t orgpos, fsize;
  3.  
  4.     //guarda posicion original
  5.     orgpos = ftell(handle);
  6.  
  7.     //mueve a posicion final
  8.     fseek(handle, 0L, SEEK_END);
  9.  
  10.     //solicita posicion actual (equivale al tamaño en bytes)
  11.     fsize = ftell(handle);
  12.  
  13.     //restaura posicion original
  14.     fseek(handle, orgpos, SEEK_SET);
  15.  
  16.     return fsize;
  17. }

Saludos
vosk
  #5 (permalink)  
Antiguo 09/10/2013, 14:44
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: duda con funcion fseek en c

Por cierto, acabo de revisar la referencia de fseek y esto es lo que pone acerca del flag de posicion SEEK_END:

Código C:
Ver original
  1. SEEK_END - End of file. Library implementations are allowed to not meaningfully support SEEK_END (therefore, code using it has
  2. no real standard portability)

Con lo que entiendo que es mejor no usar este flag, no se si esto del estandar es algo nuevo pero nunca me había fijado en este detalle.

Saludos
vosk

Última edición por vosk; 09/10/2013 a las 14:53

Etiquetas: funcion, nombre
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:03.