Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Fire544 en 3 Diciembre 2012, 03:36 AM

Título: Aplicacion explota en varios stream (FILE *)
Publicado por: Fire544 en 3 Diciembre 2012, 03:36 AM
Estoy desarrollando una aplicacion tipo Cuentas por Cobrar, intento reabrir un descriptor de fichero como lectura y modificacion binaria, para poder modificar contenido con fseek(), puedo modificar el contenido x veces en tiempo de ejecucion, cuando estoy intentando la 3ra modificacion, entonces explota, pero he verificado las salidas de los descriptores y solo el descriptor que utiliza la funcion getPos() devuelve error, al parecer no pudo abrir el descriptor, pero a que se debe, he cerrado todos los ficheros correctamente, he colocado reposicionamiento al SET 0 de mi descriptor utilizando fseek(), pero nada todo igual.


//codigo boton  
    posFich=getPos(cedulaPg);
    getPosFich(posFich-1, modifFichero);
    pagoActual=mntPagoClt(cedulaPg);
    sumaPagada=sumar(mntPago, mntCount);
    //suma de pago
    pagoSumado=pagoActual-sumaPagada;
   
    sprintf(usuario.deuda, "%i", pagoSumado);
    //guardamos estructura de datos en fichero
    fwrite(&usuario, sizeof(struct user), 1, modifFichero);
    //cerramos fichero
    fclose(modifFichero);


La funcion getPos(), con esta funcion devuelvo la posicion fisica actual del fichero.

int getPos(char *cedulaPago)
{
    FILE *dato = fopen("fixcom.fix", "rb");
    int pos=0;
    //fseek(dato, 0L, SEEK_SET);
    verificarFichero(dato,"dato");
   
    while(fread(&usuario, sizeof(struct user), 1, dato)!=0)
    {
                          pos++;
                          if(strcmp(cedulaPago, usuario.cedula)==0)
                          {
                                                fclose(dato);
                                                return pos;
                                                }
                          }
    }


La funcion mntPagoClt(), la utilizo para sacar el ultimo pago que realizo el cliente.


int mntPagoClt(char *cedula)
{
    int prestamoD=0;

    FILE *fichLeer=fopen("fixcom.fix", "rb");
   
    while(fread(&usuario, sizeof(struct user), 1, fichLeer)!=0)
    {
    if(strcmp(cedula, usuario.cedula)==0)
    {
                                           
    fclose(fichLeer);
                           
    return prestamoD=atoll(usuario.deuda);
            }
            }
    }


De esta manera estoy abriendo los descriptores de fichero:

modifFichero=fopen("fixcom.fix","rb+");//lectura binaria y para actualizar descriptor
fdiskR=fopen("fixcom.fix","rb");//leer el fichero completo hasta encontrar lo buscado con strcmp()
fdiskW=fopen("fixcom.fix","a"); //para guardar siempre en la ultima linea del fichero


La funcion getPosFich(). Con esta funcion me posiciono en donde quiero en el descriptor

void getPosFich(int pos, FILE *filePtr)
{
     fseek(filePtr, pos*sizeof(struct user), SEEK_SET);
     }

Nota: Todos los datos se alojan en un fichero, llamado fixcon.fix.
Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: naderST en 3 Diciembre 2012, 04:22 AM
Valida que fopen no te esté retornando NULL y además verifica que no estés abriendo el fichero dos veces o algo por el estilo.

¿Qué tal si esta condición no se cumple?


strcmp(cedulaPago, usuario.cedula)==0


No se cerraría el fichero y ahí tenemos un problema.
Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: durasno en 3 Diciembre 2012, 04:55 AM
Ademas de lo que te marcaron, tambien esta mal empleado los retornos en las funciones. Solo si entra al while y se cumple el if retornas un valor, y si nose cumple nada????

Tambien tendrias q cambiar la condicion de los bucles, mira el manual de fread:
http://c.conclase.net/librerias/?ansifun=fread



Saludos
Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: Fire544 en 3 Diciembre 2012, 21:15 PM
naderST: Gracias por responder, si mira verifico que el descriptor ande bien !! fijate en esta funcion luego de abrir el descriptor verificarFichero(dato,"dato");, y su cuerpo:

void verificarFichero(FILE *fil, char *nameFich)
{
    if(fil==NULL)
    {
                 fprintf(stdout, "Error de fichero %s", nameFich);
                 }
    }


Nota: Cuando intento verificar el descriptor, entonces me lanza error en el fichero de lectura. Tiene error para abrir creo, pero a que se debe esto !!!

He intentado rebobinar el descriptor con ayuda de rewind(), pero nada todo igual !!.
Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: durasno en 3 Diciembre 2012, 22:03 PM
Usa la funcion perror() para saber cual puede ser la causa


Saludos
Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: Fire544 en 4 Diciembre 2012, 23:45 PM
Si mira durasno, el mensaje que me lanza perror():

Fichero dato: No error
Fichero dato: No error
Fichero dato: No error
Fichero dato: Too many open files


Por lo que veo no detecta errores !!!, ahora voy a ver que pasa si modifico algo, lo que pasa es que trabajo con el motor grafico de SDL, para graficar y tengo que estar metiendo while() por todos lados !!
Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: Fire544 en 5 Diciembre 2012, 00:01 AM
Voy a publica el codigo, pero creo que sera dificil leerlo, carece de organizacion (Optimizacion).


#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include <sys/time.h>
#include "include/components.cpp"
#include "include/ventanas.c"
#include "include/struct_clientes.h"
#include "include/def_cv.h"
#include "include/suma.cpp"
//estructura para manejar datos clientes
void seccion_de_botones(int);
void presentar_fecha();
void save_array(int,int,char);
void save_disk();
float calculaPrest();
void dato_prestamo(int, int);
int getPos(char *);
void getPosFich(int, FILE *);
int mntPagoClt(char *);

char buscarCedula[TAM], cedulaPg[TAM];
int contPrestamo=0, pagos=0, verdad=DISABLE, cant=0, cuota=0, contCheckbox=0, posFich=0,
mntPago[TAM], mntCount=0, permit=ENABLE;
unsigned int sumaPagada=0, pagoActual=0, pagoSumado=0;

struct user{
        char nombre[TAM],
        apellido[TAM],
        cedula[TAM],
        fecha[TAM],
        prestms[TAM],
        prestamoPorCuota[TAM],
        numeroPagos[TAM],
        fFinal[TAM],
        deuda[TAM];
        int prest[TAM], numPagos[TAM];
        }usuario;
       
typedef struct mesDia{
             int mes, dia;
             };
   
int main(int argc, char *argv[])
{
vent ventana[3];
check checkbox;

int color=AZUL, sig_boton, sig_y_boton, sig_tex, sig_y_tex;
int done = 0, bit_fecha=0, evento_keyboard=DISABLE,
active_texbox, checked=0, xsig, ysig;   
char *texto_texbox="", fecha2[10], *texbox_texto=""/*accion*/;

crear_pantalla(600, 400, CARGA_PANT, "FIXCOM");
//inicializamos checkbox a DISABLE
checkbox.select=0;
// texto checkbox
inicializarTextoCheckbox[1]="2-C";
inicializarTextoCheckbox[2]="4-C";
inicializarTextoCheckbox[3]="6-C";
inicializarTextoCheckbox[4]="8-C";
//desactivamos ventanas
ventana[MENU].select=ENABLE; //dejamos menu porque es pantalla inicial
ventana[ADD_USERS].select=DISABLE;
ventana[LIST_USERS].select=DISABLE;
ventana[HACER_PAGOS].select=DISABLE;
//elementos ventanas
elementos_ventana();
//bucle o loop de aplicacion
while(done == DISABLE)
{
//esperamos eventos en cola
SDL_WaitEvent(&event);
//consultamos eventos en cola
if (event.type == SDL_QUIT)
{
done = 1;
}
//cambiamos apariencia a botones
create_button(sig_boton, sig_y_boton, texto_texbox, 10, color);

if(event.type==SDL_MOUSEBUTTONDOWN&CLICKPRESIONADO)
{fprintf(stdout, "X=%i, Y=%i\n", event.button.x, event.button.y);}

if(bit_texbox==ENABLE)
{
create_imagen(sig_tex,sig_y_tex,"images/tapa_label.jpg");
create_label(sig_tex,sig_y_tex,texbox_texto,15,AZUL);
}
           
bit_texbox=DISABLE;
color=AZUL;
checked=0;
//eventos botones ventana menu
if(ventana[MENU].select==ENABLE)
{
//boton agregar users
if((EVENTOX>=151&EVENTOX<=258)&&(EVENTOY>=84&EVENTOY<=113))
{
     sig_boton=150;
     sig_y_boton=80;
     texto_texbox="Agregar Users";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     create_button_efecto(150, 80);
     SDL_Delay(50);
     create_button(150, 80, texto_texbox, 10, AZUL);                               
     //codigo boton
     ventana[MENU].select=DISABLE;
     ventana[ADD_USERS].select=ENABLE;
     //llama a ventana
     sig_boton=-150,sig_y_boton=-150;
     checkbox.select=DISABLE;
     checked=DISABLE;
     
     create_imagen(0,0,"images/imagen.jpg");
     v(ADD_USERS);
     //ejecutamos botones de ventanas
     seccion_de_botones(ADD_USERS);
     //fin codigo boton agregar users
     }
     }
//boton listar users
else if((EVENTOX>=148&EVENTOX<=260)&(EVENTOY>=155&EVENTOY<=185))
{
     sig_boton=150;
     sig_y_boton=150;
     texto_texbox="Buscar Users";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     create_button_efecto(150, 150);
     SDL_Delay(50);
     create_button(150, 150, texto_texbox, 10, AZUL);
     //codigo boton 
     //desactivamos ventana menu
     ventana[MENU].select=DISABLE;
     ventana[LIST_USERS].select=ENABLE; //activamos ventana listar users
     
     create_imagen(0,0,"images/imagen.jpg");
     
     sig_boton=-150,sig_y_boton=-150;
     v(LIST_USERS);   
     seccion_de_botones(LIST_USERS);
     //fin codigo boton listar_users                         
     }                                                                                                         
}
//boton hacer pagos
else if((EVENTOX>=151&EVENTOX<=258)&&(EVENTOY>=220&EVENTOY<=255))
{
     sig_boton=151;
     sig_y_boton=220;
     texto_texbox="Hacer Pagos";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     create_button_efecto(150, 220);
     SDL_Delay(50);
     create_button(150, 220, texto_texbox, 10, AZUL);                               
     //codigo boton
     ventana[MENU].select=DISABLE;
     ventana[HACER_PAGOS].select=ENABLE;
     //llama a ventana
     sig_boton=-150,sig_y_boton=-150;
     create_imagen(0,0,"images/imagen.jpg");
     v(HACER_PAGOS);
     //ejecutamos botones de ventanas
     seccion_de_botones(HACER_PAGOS);
     //fin codigo boton agregar users
     }
     }
//fin eventos botones ventana menu 
}
//sección botones add_users
if(ventana[ADD_USERS].select==ENABLE)
{
//eventos botones
//boton ir a menu
if(bit_fecha==0)
{
presentar_fecha();
bit_fecha=1;
}
if((EVENTOX>=349&EVENTOX<=463)&(EVENTOY>=355&EVENTOY<=382))
{
     sig_boton=350;
     sig_y_boton=350;
     texto_texbox="Ir a Menu";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     create_button_efecto(350, 350);
     SDL_Delay(50);
     create_button(350, 350, texto_texbox, 10, AZUL);
     //codigo boton 
     //desactivamos ventana menu
     ventana[ADD_USERS].select=DISABLE;
     ventana[MENU].select=ENABLE;
     
     create_imagen(0,0,"images/imagen.jpg");
     
     sig_boton=-150,sig_y_boton=-150;
     sig_tex=-71,sig_y_tex=-18;
     evento_keyboard=DISABLE;
     
     bit_fecha=0;
     pagos=0;
     contPrestamo=0;
     cant=0;
     
     limpiarArray(usuario.apellido,TAM);
     limpiarArray(usuario.nombre,TAM);
     limpiarArray(usuario.cedula,TAM);
     limpiarArray(usuario.deuda,TAM);
     limpiarArray(usuario.fecha,TAM);
     limpiarArray(usuario.fFinal,TAM);
     limpiarArray(usuario.numeroPagos,TAM);
     limpiarArray(usuario.prestamoPorCuota,7);
     limpiarArray(usuario.prestms,TAM);
     limpiarArray(buscarCedula,TAM);
     limpiarArrayEntero(usuario.prest,3);
     limpiarArrayEntero(usuario.numPagos,3);
     
     elementos_ventana();
     //fin codigo boton add_users                         
     }                                                                                                         

//boton limpiar
if((EVENTOX>=49&EVENTOX<=159)&(EVENTOY>=355&EVENTOY<=382))
{
     sig_boton=50;
     sig_y_boton=350;
     texto_texbox="Limpiar";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     create_button_efecto(50, 350);
     SDL_Delay(50);
     create_button(50, 350, texto_texbox, 10, AZUL);
     //codigo boton 
     //desactivamos ventana menu
     sig_boton=-150,sig_y_boton=-150;
     sig_tex=-71,sig_y_tex=-18;
     evento_keyboard=DISABLE;
     
     pagos=0;
     contPrestamo=0;
     cant=0;
     //limpiamos cuadros de textos erroneos
     clear_error(400, 150);
     clear_error(400, 10);
     create_imagen(5, 300, "images/tapa_error.jpg");
     create_imagen(5, 315, "images/tapa_error.jpg");
     
     limpiarArray(usuario.apellido,TAM);
     limpiarArray(usuario.nombre,TAM);
     limpiarArray(usuario.cedula,TAM);
     limpiarArray(usuario.deuda,TAM);
     limpiarArray(usuario.fecha,TAM);
     limpiarArray(usuario.fFinal,TAM);
     limpiarArray(usuario.numeroPagos,TAM);
     limpiarArray(usuario.prestamoPorCuota,7);
     limpiarArray(usuario.prestms,TAM);
     limpiarArray(buscarCedula,TAM);
     limpiarArrayEntero(usuario.prest,3);
     limpiarArrayEntero(usuario.numPagos,3);
     //fin codigo boton add_users                         
     }                                                                                                         

//evento boton agregar
if((EVENTOX>=194&EVENTOX<=312)&(EVENTOY>=355&EVENTOY<=382))
{
     sig_boton=200;
     sig_y_boton=350;
     texto_texbox="Agregar";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     create_button_efecto(200, 350);
     SDL_Delay(50);
     create_button(200, 350, texto_texbox, 10, AZUL);
     //codigo boton 
     
     active_texbox=SAVE_DISK;
     
     if(pagos==0)
     {
     /*mensaje de error*/mod_error(400, 10, "Seleccione Pago", 10);
      permit=DISABLE;
      }
     
      if(pagos!=0)
      {
      clear_error(400,10);
      }
     
     if(usuario.nombre[0]=='\0'||usuario.cedula[0]=='\0'||usuario.prestms[0]=='\0')
     {/*mensaje de error*/
     create_imagen(5, 300, "images/tapa_error.JPG");
     create_label(5, 300, "ES OBLIGATORIO: Nombre, Cedula y Prestms", 10, ROJO);
     //desactivamos los que nos permite guardar
     permit=DISABLE;
     }
     
     if(usuario.nombre[0]!='\0'&usuario.cedula[0]!='\0'&usuario.prestms[0]!='\0')
     {/*mensaje de error*/
     create_imagen(5, 300, "images/tapa_error.JPG");
     }
     
     if(strlen(usuario.cedula)<=10)
     {
     clear_error(400,150);
     mod_error(400, 150, "Cedula debe tener 11 Digitos", 10);                             
     permit=DISABLE;
     }
     
     if(strlen(usuario.cedula)>=11)
     {
     clear_error(400,150);                             
     }
     
     if(permit==ENABLE)
     {
     clear_error(400,10);
     save_disk();
     create_imagen(5, 315, "images/tapa_error.jpg");
     create_label(5, 315, "Datos guardados exitosamente", 10, AZUL);
     }
     
     evento_keyboard=DISABLE;
     //fin codigo boton add_users                         
     }                                   
}
//checkbox 2 pagos
if((EVENTOX>=64&EVENTOX<=74)&&(EVENTOY>=178&EVENTOY<=188))
{

xsig=65, ysig=180;

if(EVENTOCLICK==1&CLICKPRESIONADO)
{
checkbox.select++;
if(checkbox.select==1)
{       
checkbox_select(xsig,ysig);           
//asignamos numero de pago
pagos=2;
permit=ENABLE;
}                       
if(checkbox.select==2)
{
create_checkbox(xsig,ysig);
checkbox.select=0; 
pagos=0;
permit=DISABLE;           
}   
}

}
//checkbox 4 pagos
if((EVENTOX>=65&EVENTOX<=73)&&(EVENTOY>=200&EVENTOY<=208))
{

xsig=65, ysig=200;

if(EVENTOCLICK==1&CLICKPRESIONADO)
{
checkbox.select++;
if(checkbox.select==1)
{       
checkbox_select(xsig,ysig);           
//asignamos numero de pago
pagos=4;
permit=ENABLE;
}                       
if(checkbox.select==2)
{
create_checkbox(xsig,ysig);   
checkbox.select=0;   
pagos=0; 
permit=DISABLE;     
}   
}
}
//checkbox 6 pagos
if((EVENTOX>=65&EVENTOX<=73)&&(EVENTOY>=220&EVENTOY<=228))
{

xsig=65, ysig=220;

if(EVENTOCLICK==1&CLICKPRESIONADO)
{
checkbox.select++;
if(checkbox.select==1)
{       
checkbox_select(xsig,ysig);           
//asignamos numero de pago
pagos=6;
permit=ENABLE;
}                       
if(checkbox.select==2)
{
create_checkbox(xsig,ysig); 
checkbox.select=0;
pagos=0; 
permit=DISABLE;         
}   
}

}
//checkbox 8 pagos
if((EVENTOX>=65&EVENTOX<=73)&&(EVENTOY>=240&EVENTOY<=248))
{

xsig=65, ysig=240;

if(EVENTOCLICK==1&CLICKPRESIONADO)
{
checkbox.select++;
if(checkbox.select==1)
{       
checkbox_select(xsig,ysig);           
//asignamos numero de pago
pagos=8;
permit=ENABLE;
}                       
if(checkbox.select==2)
{
create_checkbox(xsig,ysig); 
checkbox.select=0;   
pagos=0;   
permit=DISABLE;     
}   
}

}
//revisamos si se llego al final de texbox
if(sig>=280)
{evento_keyboard=DISABLE;}
//eventos texbox
//texbox nombre
if((EVENTOX>=69&EVENTOX<=290)&(EVENTOY>=9&EVENTOY<=30))
{
bit_texbox=ENABLE;
texbox_texto="Nombre";
sig_tex=5,sig_y_tex=10;
active_texbox=NOMBRE;
create_label(sig_tex,sig_y_tex,"Nombre", 15, ROJO);
if(EVENTOCLICK==1&&CLICKPRESIONADO)
{
cant=0;
sig=71,sig_y=18;                               
evento_keyboard=ENABLE;
}                                                       

//texbox apellido
if((EVENTOX>=69&EVENTOX<=290)&(EVENTOY>=39&EVENTOY<=60))
{
bit_texbox=ENABLE;
texbox_texto="Apellido";
sig_tex=5,sig_y_tex=40;
active_texbox=APELLIDO;
create_label(sig_tex,sig_y_tex,"Apellido", 15, ROJO);
if(EVENTOCLICK==1&&CLICKPRESIONADO)
{
cant=0;
sig=71,sig_y=48;                               
evento_keyboard=ENABLE;
}                                                       

//texbox cedula
if((EVENTOX>=69&EVENTOX<=290)&(EVENTOY>=68&EVENTOY<=91))
{
bit_texbox=ENABLE;
texbox_texto="Cedula";
sig_tex=5,sig_y_tex=70;
active_texbox=CEDULA;
create_label(sig_tex,sig_y_tex,"Cedula", 15, ROJO);
if(EVENTOCLICK==1&&CLICKPRESIONADO)
{
cant=0;
sig=71,sig_y=78;                               
evento_keyboard=ENABLE;
}                                                       
}
//texbox prestamo
if((EVENTOX>=69&EVENTOX<=290)&(EVENTOY>=129&EVENTOY<=151))
{
bit_texbox=ENABLE;
texbox_texto="Prestms";
sig_tex=5,sig_y_tex=130;
active_texbox=PRESTMS;
create_label(sig_tex,sig_y_tex,"Prestms", 15, ROJO);
if(EVENTOCLICK==1&&CLICKPRESIONADO)
{
cant=0;
sig=71,sig_y=138;                               
evento_keyboard=ENABLE;
}                                                       
}
//terminar sección ventana agregar user
}
//sección de botones listar users
if(ventana[LIST_USERS].select==ENABLE)
{
//eventos botones
//boton ir a menu
if((EVENTOX>=349&EVENTOX<=463)&(EVENTOY>=355&EVENTOY<=382))
{
     sig_boton=350;
     sig_y_boton=350;
     texto_texbox="Ir a Menu";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     create_button_efecto(350, 350);
     SDL_Delay(50);
     create_button(350, 350, texto_texbox, 10, AZUL);
     //codigo boton 
      verdad=DISABLE;
      //limpiamos todos los arrays de la estructura usuario
     limpiarArray(usuario.apellido,TAM);
     limpiarArray(usuario.nombre,TAM);
     limpiarArray(usuario.cedula,TAM);
     limpiarArray(usuario.deuda,TAM);
     limpiarArray(usuario.fecha,TAM);
     limpiarArray(usuario.fFinal,TAM);
     limpiarArray(usuario.numeroPagos,TAM);
     limpiarArray(usuario.prestamoPorCuota,TAM);
     limpiarArray(usuario.prestms,TAM);
     limpiarArray(buscarCedula,TAM);
     limpiarArrayEntero(usuario.prest,3);
     limpiarArrayEntero(usuario.numPagos,3);
     //desactivamos ventana menu
     ventana[LIST_USERS].select=DISABLE;
     ventana[MENU].select=ENABLE;
     
     create_imagen(0,0,"images/imagen.jpg");
     
     sig_boton=-150,sig_y_boton=-150;
     sig_tex=-71,sig_y_tex=-18;
     evento_keyboard=DISABLE;
     elementos_ventana();
     //fin codigo boton listar_users                         
     }                                                                                                         

//parar eventos texbox
if(sig>=565&&active_texbox==BUSCAR_C)
{evento_keyboard=DISABLE;}
//evento boton buscar
if((EVENTOX>=349&EVENTOX<=463)&(EVENTOY>=114&EVENTOY<=145))
{
     sig_boton=350;
     sig_y_boton=110;
     texto_texbox="Buscar";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     fdiskR=fopen("fixcom.fix","rb");
     
     create_button_efecto(350, 110);
     SDL_Delay(50);
     create_button(350, 110, texto_texbox, 10, AZUL);
     //codigo boton 
     
     //comprobamo si cedula contiene 13 digitos
     if(strlen(buscarCedula)<=10)
     {
     clear_error(400, 200);
     mod_error(400, 200, "Cedula debe tener 11 digitos", 10);
                                   }
                                   
     while(fread(&usuario,sizeof(struct user),1,fdiskR)!=0)
     {
     if(strcmp(buscarCedula,usuario.cedula)==0)
     {
     
     SDL_printf(73,18,usuario.nombre,10,AZUL);
     SDL_printf(73,48,usuario.apellido,10,AZUL);   
     SDL_printf(73,108,usuario.prestms,10,AZUL);
     SDL_printf(73,78,usuario.fecha,10,AZUL);
     SDL_printf(73,198,usuario.prestamoPorCuota,10,AZUL);
     SDL_printf(73,228,usuario.numeroPagos,10,AZUL);
     SDL_printf(73,168,usuario.fFinal,10,AZUL);
     SDL_printf(73,138,usuario.deuda,10,AZUL);
     
     verdad=ENABLE;
     
     }
     }
     
     if(verdad==DISABLE)
     {
     create_imagen(10, 285, "images/tapa_error.jpg");
     create_label(10, 285, "ERROR: No existe cliente !", 10, ROJO);                                         
     }
     
     sig_boton=-150,sig_y_boton=-150;
     sig_tex=-71,sig_y_tex=-18;
     evento_keyboard=DISABLE;
     //fin codigo boton listar_users                         
     }                                                                                                         

//evento boton limpiar
if((EVENTOX>=192&EVENTOX<=313)&(EVENTOY>=350&EVENTOY<=383))
{
     sig_boton=200;
     sig_y_boton=350;
     texto_texbox="Limpiar";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     
     create_button_efecto(200, 350);
     SDL_Delay(50);
     create_button(200, 350, texto_texbox, 10, AZUL);
     //codigo boton 
     
     //limpiamos errores comprobacion users y digitos cedula
     
     clear_error(400, 200);
     
     create_imagen(10, 285, "images/tapa_error.jpg");
     
     //limpiamos arrays de estructuras
     
     cant=0;
     verdad=DISABLE;
     
     limpiarArray(usuario.apellido,TAM);
     limpiarArray(usuario.nombre,TAM);
     limpiarArray(usuario.cedula,TAM);
     limpiarArray(usuario.deuda,TAM);
     limpiarArray(usuario.fecha,TAM);
     limpiarArray(usuario.fFinal,TAM);
     limpiarArray(usuario.numeroPagos,TAM);
     limpiarArray(usuario.prestamoPorCuota,TAM);
     limpiarArray(usuario.prestms,TAM);
     limpiarArray(buscarCedula,TAM);
     limpiarArrayEntero(usuario.prest,3);
     limpiarArrayEntero(usuario.numPagos,3);
     
     sig_boton=-150,sig_y_boton=-150;
     sig_tex=-71,sig_y_tex=-18;
     evento_keyboard=DISABLE;
     //fin codigo boton listar_users                         
     }                                                                                                         

//eventos texbox
//texbox buscar cedula
if((EVENTOX>=348&EVENTOX<=570)&(EVENTOY>=68&EVENTOY<=89))
{
bit_texbox=ENABLE;
texbox_texto="Buscar C.";
sig_tex=350,sig_y_tex=50;
active_texbox=BUSCAR_C;
create_label(sig_tex,sig_y_tex,"Buscar C.", 15, ROJO);
if(EVENTOCLICK==1&&CLICKPRESIONADO)
{
cant=0;
sig=351,sig_y=78;                               
evento_keyboard=ENABLE;
}                                                       

//fin de eventos texbox listar users                               
}
//sección ventana hacer pagos
if(ventana[HACER_PAGOS].select==ENABLE)
{
//eventos botones
//boton ir a menu
modifFichero=fopen("fixcom.fix","rb+");

if((EVENTOX>=349&EVENTOX<=463)&(EVENTOY>=355&EVENTOY<=382))
{
     sig_boton=350;
     sig_y_boton=350;
     texto_texbox="Ir a Menu";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     create_button_efecto(350, 350);
     SDL_Delay(50);
     create_button(350, 350, texto_texbox, 10, AZUL);
     //codigo boton 
     //limpiamos todos los arrays de la estructura usuario
     limpiarArray(usuario.apellido,TAM);
     limpiarArray(usuario.nombre,TAM);
     limpiarArray(usuario.cedula,TAM);
     limpiarArray(usuario.deuda,TAM);
     limpiarArray(usuario.fecha,TAM);
     limpiarArray(usuario.fFinal,TAM);
     limpiarArray(usuario.numeroPagos,TAM);
     limpiarArray(usuario.prestamoPorCuota,TAM);
     limpiarArray(usuario.prestms,TAM);
     limpiarArrayEntero(usuario.prest,3);
     limpiarArrayEntero(usuario.numPagos,3);
     //desactivamos ventana menu
     
     ventana[MENU].select=ENABLE;
     ventana[HACER_PAGOS].select=DISABLE;
     
     create_imagen(0,0,"images/imagen.jpg");
     
     sig_boton=-150,sig_y_boton=-150;
     sig_tex=-71,sig_y_tex=-18;
     evento_keyboard=DISABLE;
     elementos_ventana();
     //fin codigo boton listar_users                         
     }                                                                                                         
}
//boton realizar
if((EVENTOX>=50&EVENTOX<=159)&(EVENTOY>=355&EVENTOY<=382))
{
     sig_boton=50;
     sig_y_boton=350;
     texto_texbox="Realizar";
     color=BOTON_ILUM;
     //click
     if(EVENTOCLICK==1&CLICKLIBERADO)
     {
     //efecto boton
     create_button_efecto(50, 350);
     SDL_Delay(50);
     create_button(50, 350, texto_texbox, 10, AZUL);
     //codigo boton 
     posFich=getPos(cedulaPg);
     getPosFich(posFich-1, modifFichero);
     pagoActual=mntPagoClt(cedulaPg);
     sumaPagada=sumar(mntPago, mntCount);
     //suma de pago
     pagoSumado=pagoActual-sumaPagada;
     
     sprintf(usuario.deuda, "%i", pagoSumado);
     //guardamos estructura de datos en fichero
     fwrite(&usuario, sizeof(struct user), 1, modifFichero);
     //cerramos fichero
     fclose(modifFichero);

     //limpiamos arrays de elementos
     limpiarArray(cedulaPg, TAM);
     limpiarArrayEntero(mntPago, TAM);
     //volvemos variables a su valor 0
     sumaPagada=0;
     pagoActual=0;
     pagoSumado=0;
     mntCount=0;
     cant=0;
     posFich=0;
     
     //desactivamos ventana menu
     ventana[MENU].select=DISABLE;
     //activamos la ventana actual
     ventana[HACER_PAGOS].select=ENABLE;
     
     sig_boton=-150,sig_y_boton=-150;
     sig_tex=-71,sig_y_tex=-18;
     evento_keyboard=DISABLE;
     //fin codigo boton hacer pagos                         
     }                                                                                                         
}                                                                             
//fin acciones boton hacer pagos

//eventos texbox
//Cedula Cliente
if((EVENTOX>=261&EVENTOX<=480)&(EVENTOY>=70&EVENTOY<=90))
{
bit_texbox=ENABLE;
texbox_texto="Cedula C.";
sig_tex=260,sig_y_tex=50;
active_texbox=BUSCACEDULA;
create_label(sig_tex,sig_y_tex,"Cedula C.", 15, ROJO);
if(EVENTOCLICK==1&&CLICKPRESIONADO)
{
cant=0;
sig=261,sig_y=78;                               
evento_keyboard=ENABLE;
}                               
}
//Monto
if((EVENTOX>=261&EVENTOX<=480)&(EVENTOY>=118&EVENTOY<=142))
{
bit_texbox=ENABLE;
texbox_texto="Monto";
sig_tex=260,sig_y_tex=100;
active_texbox=MONTOPAGO;
create_label(sig_tex,sig_y_tex,"Monto", 15, ROJO);
if(EVENTOCLICK==1&&CLICKPRESIONADO)
{
cant=0;
sig=261,sig_y=128;                               
evento_keyboard=ENABLE;
}                               
}
//limite de eventos teclado en caso de
if(sig>=480)
{evento_keyboard=DISABLE;}
//fin eventos texbox
}

//inicio gestion eventos
if(evento_keyboard==ENABLE)
{
if(event.key.keysym.sym==SDLK_a&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "a", 10, ROJO);
     save_array(active_texbox,cant,'a');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_b&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "b", 10, ROJO);
     save_array(active_texbox,cant,'b');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_c&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "c", 10, ROJO);
     save_array(active_texbox,cant,'c');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_d&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "d", 10, ROJO);
     save_array(active_texbox,cant,'d');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_e&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "e", 10, ROJO);
     save_array(active_texbox,cant,'e');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_f&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "f", 10, ROJO);
     save_array(active_texbox,cant,'f');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_g&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "g", 10, ROJO);
     save_array(active_texbox,cant,'g');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_h&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "h", 10, ROJO);
     save_array(active_texbox,cant,'h');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_i&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "i", 10, ROJO);
     save_array(active_texbox,cant,'i');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_j&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "j", 10, ROJO);
     save_array(active_texbox,cant,'j');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_k&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "k", 10, ROJO);
     save_array(active_texbox,cant,'k');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_l&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "l", 10, ROJO);
     save_array(active_texbox,cant,'l');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_m&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "m", 10, ROJO);
     save_array(active_texbox,cant,'m');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_n&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "n", 10, ROJO);
     save_array(active_texbox,cant,'n');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_o&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "o", 10, ROJO);
     save_array(active_texbox,cant,'o');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_p&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "p", 10, ROJO);
     save_array(active_texbox,cant,'p');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_q&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "q", 10, ROJO);
     save_array(active_texbox,cant,'q');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_r&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "r", 10, ROJO);
     save_array(active_texbox,cant,'r');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_s&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "s", 10, ROJO);
     save_array(active_texbox,cant,'s');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_t&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "t", 10, ROJO);
     save_array(active_texbox,cant,'t');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_u&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "u", 10, ROJO);
     save_array(active_texbox,cant,'u');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_v&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "v", 10, ROJO);
     save_array(active_texbox,cant,'v');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_w&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "w", 10, ROJO);
     save_array(active_texbox,cant,'w');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_x&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "x", 10, ROJO);
     save_array(active_texbox,cant,'x');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_y&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "y", 10, ROJO);
     save_array(active_texbox,cant,'y');
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_z&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "z", 10, ROJO);
     save_array(active_texbox,cant,'z');
     cant++;
     sig+=10;
     }   
else if(event.key.keysym.sym==SDLK_KP0&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "0", 10, ROJO);
     save_array(active_texbox,cant,'0');
     dato_prestamo(active_texbox,0);
     cant++;
     sig+=10;
     }         
else if(event.key.keysym.sym==SDLK_KP1&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "1", 10, ROJO);
     save_array(active_texbox,cant,'1');
     dato_prestamo(active_texbox,1);
     cant++;
     sig+=10;
     }       
else if(event.key.keysym.sym==SDLK_KP2&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "2", 10, ROJO);
     save_array(active_texbox,cant,'2');
     dato_prestamo(active_texbox,2);
     cant++;
     sig+=10;
     }   
else if(event.key.keysym.sym==SDLK_KP3&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "3", 10, ROJO);
     save_array(active_texbox,cant,'3');
     dato_prestamo(active_texbox,3);
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_KP4&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "4", 10, ROJO);
     save_array(active_texbox,cant,'4');
     dato_prestamo(active_texbox,4);
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_KP5&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "5", 10, ROJO);
     save_array(active_texbox,cant,'5');
     dato_prestamo(active_texbox,5);
     cant++;
     sig+=10;
     }         
else if(event.key.keysym.sym==SDLK_KP6&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "6", 10, ROJO);
     save_array(active_texbox,cant,'6');
     dato_prestamo(active_texbox,6);
     cant++;
     sig+=10;
     }       
else if(event.key.keysym.sym==SDLK_KP7&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "7", 10, ROJO);
     save_array(active_texbox,cant,'7');
     dato_prestamo(active_texbox,7);
     cant++;
     sig+=10;
     }   
else if(event.key.keysym.sym==SDLK_KP8&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "8", 10, ROJO);
     save_array(active_texbox,cant,'8');
     dato_prestamo(active_texbox, 8);
     cant++;
     sig+=10;
     }
else if(event.key.keysym.sym==SDLK_KP9&EVENTOCLICK)
{
     SDL_printf(sig, sig_y, "9", 10, ROJO);
     save_array(active_texbox,cant,'9');
     dato_prestamo(active_texbox, 9);
     cant++;
     sig+=10;
     }     
     }
//fin gestion             

}
}
//funcion aloja datos a array !!     
void save_array(int active_texbox, int cant, char byte)
{
     
     if(active_texbox==NOMBRE)
     {
                              usuario.nombre[cant]=byte;
                              }
     if(active_texbox==APELLIDO)
     {
                              usuario.apellido[cant]=byte;
                              }
     if(active_texbox==CEDULA)
     {
                              usuario.cedula[cant]=byte;
                              }
     if(active_texbox==PRESTMS)
     {
                              usuario.prestms[cant]=byte;
                              contPrestamo++;
                              }
     if(active_texbox==BUSCAR_C)
     {
                             buscarCedula[cant]=byte;
                              }
     if(active_texbox==BUSCACEDULA)
     {
                             cedulaPg[cant]=byte;
                              }                                             
}
//calculo de fecha final
float calculaPrest()
{
     int prestamoTomado=0;
     float media_prestamo=0.0, itbis=0.0, itSumado=0.0;
     
     prestamoTomado=sumar(usuario.prest, contPrestamo+1);
     
     media_prestamo=prestamoTomado/pagos;
     
     itbis=media_prestamo*0.05;
     itSumado=media_prestamo+itbis;
     
     if(prestamoTomado>=10000&prestamoTomado<=20000)
     {
     itbis=media_prestamo*0.15;
     itSumado=media_prestamo+itbis;
     }
     
     if(prestamoTomado>=20000&prestamoTomado<=30000)
     {
     itbis=media_prestamo*0.25;
     itSumado=media_prestamo+itbis;
     }
     
     return itSumado;
     }
//calculo fecha final
void fechaFinal()
{       
     int dia=0, mes=0, ano=0, totalF=0, obj=0, objDia=0;
     
     totalF=15*pagos;
     
     mes=fecha->tm_mon+1;
     dia=fecha->tm_mday;
     ano=fecha->tm_year+1900;
     
     while(obj<totalF)
     {
            if(objDia>=30)
            {
                       mes=mes+1;
                       dia=objDia;
                       objDia=0;
                       
                       if(mes>=12)
                       {
                                  mes=1;
                                  ano=ano+1;
                                  }
                       }
            objDia++;                 
            obj++;
            }
           
     limpiarArray(usuario.fFinal,TAM);
     sprintf(usuario.fFinal, "%i/%i/%i", dia, mes, ano);
     }
//escribir en disco
void save_disk()
{
     time_t tiempo; //variable para el tiempo
     
     time(&tiempo);//inicilizamos tiempo
     
     fecha=localtime(&tiempo);//sacamos valores actuales de tiempo
     
     sprintf(usuario.fecha,"%i/%i/%i",fecha->tm_mday,fecha->tm_mon+1,fecha->tm_year+1900);
     
     float prestamoCalc=calculaPrest();
     cuota=atoll(usuario.prestms);
             
     sprintf(usuario.prestamoPorCuota,"%f",prestamoCalc);
     sprintf(usuario.numeroPagos,"%i", pagos);
     
     limpiarArray(usuario.fFinal, 7);
     fechaFinal();
     
     limpiarArray(usuario.deuda, TAM);
     sprintf(usuario.deuda,"%i", cuota); 
     
     fdiskW=fopen("fixcom.fix","a");
     
     fwrite(&usuario, sizeof(struct user), 1, fdiskW);
     //limpiamos variables
     cuota=0;
     prestamoCalc=0.0;
     cant=0;
     contPrestamo=0;
     
     //cerramos fichero
     fclose(fdiskW);
     }

void presentar_fecha()
{
     time_t tiempo; //variable para el tiempo
     
     time(&tiempo);//inicilizamos tiempo
     
     struct tm *f=localtime(&tiempo);//sacamos valores actuales de tiempo
     
     char fech[10];
     
     sprintf(fech,"%i/%i/%i",f->tm_mday,f->tm_mon+1,f->tm_year+1900);
     
     SDL_printf(73,108,fech,10,AZUL);
     }

void dato_prestamo(int texbox, int dato)
{
     if(texbox==PRESTMS)
     {
                        usuario.prest[contPrestamo]=dato;
                        }
                       
     if(texbox==MONTOPAGO)
     {
                             mntPago[mntCount]=dato;
                             mntCount++;
                              }
     }

int getPos(char *cedulaPago)
{
     FILE *dato = fopen("fixcom.fix", "rb");
     int pos=0;
     //fseek(dato, 0L, SEEK_SET);
     verificarFichero(dato,"dato");
     
     while(fread(&usuario, sizeof(struct user), 1, dato)!=0)
     {
                           pos++;
                           if(strcmp(cedulaPago, usuario.cedula)==0)
                           {
                                                 fclose(dato);
                                                 return pos;
                                                 }
                           }
     }

void getPosFich(int pos, FILE *filePtr)
{
     fseek(filePtr, pos*sizeof(struct user), SEEK_SET);
     }

int mntPagoClt(char *cedula)
{
     int prestamoD=0;

     FILE *fichLeer=fopen("fixcom.fix", "rb");
     
     while(fread(&usuario, sizeof(struct user), 1, fichLeer)!=0)
     {
     if(strcmp(cedula, usuario.cedula)==0)
     {
                                           
     fclose(fichLeer);
                           
     return prestamoD=atoll(usuario.deuda);
             }
             }
     }




Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: durasno en 5 Diciembre 2012, 01:29 AM
CitarPor lo que veo no detecta errores !!!
y este error "Fichero dato: Too many open files" ??? Por el tipo de error te esta fallando el cierre de los archivos ocasionando tener varios abiertos a la vez y seguramente superando a FOPEN_MAX... Revisa esto por ahi sea este el error


Saludos


PD: tambien deberias cambiar lo que te marque antes del fread
Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: Fire544 en 5 Diciembre 2012, 16:23 PM
Gracias durasno, si claro mira estoy verificando si ocurre algun evento erroneo en el descriptor antes de fread() con la funcion verificaFichero(), que recibe dos argumentos, el FILE* y char*, que es el nombre del descriptor, para poder verificar si devuelve NULL.
Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: rir3760 en 5 Diciembre 2012, 17:42 PM
naderST y durasno ya te dieron la respuesta: en las dos funciones de tu primer mensaje (getPos y mntPagoClt) cierras el archivo y retornas un valor solo si encuentras el registro buscado, si no existe eso resulta (eventualmente) en el mensaje de error "Too many open files".

Aparte de eso utilizas el operador "&" cuando deberías utilizar "&&", hay que revisar la documentación de SDL ya que este bloque es extremadamente largo:
if(event.key.keysym.sym==SDLK_a&EVENTOCLICK)
{
    SDL_printf(sig, sig_y, "a", 10, ROJO);
    save_array(active_texbox,cant,'a');
    cant++;
    sig+=10;
    }
else if(event.key.keysym.sym==SDLK_b&EVENTOCLICK)
{
    SDL_printf(sig, sig_y, "b", 10, ROJO);
    save_array(active_texbox,cant,'b');
    cant++;
    sig+=10;
    }
else if(event.key.keysym.sym==SDLK_c&EVENTOCLICK)
{
    SDL_printf(sig, sig_y, "c", 10, ROJO);
    save_array(active_texbox,cant,'c');
    cant++;
    sig+=10;
    }

/* ... */


Por ultimo tienes otro error lógico en las funciones de posicionamiento en el archivo:
int getPos(char *cedulaPago)
{
   FILE *dato = fopen("fixcom.fix", "rb");
   int pos=0;
   
   //fseek(dato, 0L, SEEK_SET);
   verificarFichero(dato,"dato");
   
   while(fread(&usuario, sizeof(struct user), 1, dato)!=0){
      pos++;
      if(strcmp(cedulaPago, usuario.cedula)==0){
         fclose(dato);
         return pos;
      }
   }
}

void getPosFich(int pos, FILE *filePtr)
{
   fseek(filePtr, pos*sizeof(struct user), SEEK_SET);
}

El problema: si el registro buscado es el primero el desplazamiento desde el inicio del archivo (indicado por SEEK_SET) debe ser cero mientras que tu indicas que es uno, mismo caso con cualquier otro registro (debes utilizar indices de posición similares al uso de un array: 0 .. N-1).

Un saludo
Título: Re: Aplicacion explota en varios stream (FILE *)
Publicado por: Fire544 en 5 Diciembre 2012, 20:52 PM
Hola gracias por responder rir3760: claro siempre empieza desde 0, es que confundes esta sintaxis getPosFich(posFich-1, modifFichero);, porque le paso los valores devueltos por getPos() -1.

He cerrado todos los ficheros al terminar el evento, pero el flujo de ejecucion aun sigue cortandose !!