ragazzi vorrei migliorare un mio programma e accetterò tutti i commenti e segnalazioni per un miglio funzionamento...
codice:#include <stdio.h> #include <malloc.h> #include <string.h> #include <time.h> #define NOME_FILE "uc.bin" #define ERRORE_USCITA "C\'è un solo utente connesso" int verificaIp(char* IPTmp); struct strDati { char ipUtente[80]; 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[]) { char* ipUtenteTmp=getenv("REMOTE_ADDR"); // "127.0.0.1"; int oraAccessoTmp=time('\0'); impoUtenti* Lista=(impoUtenti*)malloc(sizeof(impoUtenti)); impoUtenti* cLista=Lista; printf("content-type:text/html\n\n"); if(!ipUtenteTmp) { printf("%s", ERRORE_USCITA); free(Lista); exit(1); } fp=fopen(NOME_FILE, "rb"); if(fp==NULL) { printf("%s", ERRORE_USCITA); free(Lista); exit(1); } while(!feof(fp)) { fread(Lista, sizeof(impoUtenti), 1, fp); if(verificaIp(Lista->impoUtente.ipUtente)) { strcpy(Lista->impoUtente.ipUtente, Lista->impoUtente.ipUtente); if(!strcmp(Lista->impoUtente.ipUtente, ipUtenteTmp)) { Lista->impoUtente.oraAccesso=oraAccessoTmp; verificaUtente=1; } else { Lista->impoUtente.oraAccesso=Lista->impoUtente.oraAccesso; } if(!feof(fp)) { Lista->pStesso=(impoUtenti*)malloc(sizeof(impoUtenti)); Lista=Lista->pStesso; } else { Lista->pStesso=NULL; } } else { Lista->pStesso=NULL; } } fclose(fp); if(!verificaUtente) { strcpy(Lista->impoUtente.ipUtente, ipUtenteTmp); Lista->impoUtente.oraAccesso=oraAccessoTmp; Lista->pStesso=NULL; } Lista=cLista; fp=NULL; fp=fopen(NOME_FILE, "wb"); while(Lista!=NULL) { if(Lista->impoUtente.oraAccesso>(oraAccessoTmp-600) && verificaIp(Lista->impoUtente.ipUtente)) { fwrite(Lista, sizeof(impoUtenti), 1, fp); contaUtenti++; } Lista=Lista->pStesso; } fclose(fp); if(contaUtenti>1) { printf("Utenti connessi %d", contaUtenti); } else { printf("C\'è un solo utente connesso"); } Lista=cLista; liberaMemoria(Lista); // system("pause"); return 0; } // verifica ip int verificaIp(char* IPTmp) { int contaPunti=0; int x=0; for(x=0; IPTmp[x]; x++) { if(IPTmp[x]=='.') { contaPunti++; } } if(contaPunti==3) { return 1; } else { return 0; } } // libera memoria void liberaMemoria(impoUtenti* pTmp) { impoUtenti* tLista; while(pTmp!=NULL) { tLista=pTmp->pStesso; free(pTmp); pTmp=tLista; } }

Rispondi quotando
Mi sfugge il motivo di questa tua affermazione. Se non si hanno esigenze specifiche è sempre meglio ricorrere alla stdlib

.
.

