ragazzi ho creato questo programma in c e ho un piccolo problema di logica, potete controllare quale sia:
codice:#include <stdio.h> #include <malloc.h> #include <string.h> #include <time.h> #define NOME_FILE "uc.bin" #define ERRORE_USCITA "Utenti connessi: 1" struct strDati { char ipUtente[20]; int oraAccesso; }; typedef struct strContDati { struct strDati impoUtente; struct strContDati* pStesso; } impoUtenti; void liberaMemoria(impoUtenti*); FILE* fp=NULL; int contaUtenti=0; int verificaUtente=0; int main(int argc, char *argv[]) { // dati necessari dell'utente char* ipUtenteTmp="139.0.0.1"; //getenv("REMOTE_ADDR"); int oraAccessoTmp=time('\0'); impoUtenti* Lista=(impoUtenti*)malloc(sizeof(impoUtenti)); impoUtenti* cLista=Lista; printf("content-type:text/html\n\n"); // esci se non ci sono i dati necessari if(!ipUtenteTmp) { printf("%s", ERRORE_USCITA); free(Lista); exit(1); } if((fp=fopen(NOME_FILE, "rb"))==NULL) { printf("%s", ERRORE_USCITA); free(Lista); exit(1); } if(!feof(fp)) { while(!feof(fp)) { fread(Lista, sizeof(impoUtenti), 1, fp); if(!strcmp(Lista->impoUtente.ipUtente, ipUtenteTmp)) { Lista->impoUtente.oraAccesso=oraAccessoTmp; verificaUtente=1; } if(!feof(fp)) { Lista->pStesso=(impoUtenti*)malloc(sizeof(impoUtenti)); Lista=Lista->pStesso; } else { Lista->pStesso=NULL; } } } else { strcpy(Lista->impoUtente.ipUtente, ipUtenteTmp); Lista->impoUtente.oraAccesso=oraAccessoTmp; Lista->pStesso=NULL; verificaUtente=1; } if(!verificaUtente) { Lista->pStesso=(impoUtenti*)malloc(sizeof(impoUtenti)); Lista=Lista->pStesso; strcpy(Lista->impoUtente.ipUtente, ipUtenteTmp); Lista->impoUtente.oraAccesso=oraAccessoTmp; Lista->pStesso=NULL; } fclose(fp); Lista=cLista; fp=NULL; fp=fopen(NOME_FILE, "wb"); while(Lista!=NULL) { if(Lista->impoUtente.oraAccesso>(oraAccessoTmp-6000)) { fwrite(Lista, sizeof(impoUtenti), 1, fp); contaUtenti++; } Lista=Lista->pStesso; } fclose(fp); printf("Utenti connessi: %d", contaUtenti); Lista=cLista; liberaMemoria(Lista); system("pause"); return 0; } void liberaMemoria(impoUtenti* pTmp) { impoUtenti* tLista=NULL; while(pTmp!=NULL) { tLista=pTmp->pStesso; free(pTmp); pTmp=tLista; } return; }

Rispondi quotando