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;
}