[MontelLUG] Impossibilità di utilizzare variabili statiche o globali

cesco francesco.versaci a gmail.com
Lun 11 Apr 2016 11:11:01 CEST


Quarto Idus Apriles MMXVI Samuele haec scripsit:
> No, perché il pezzo di codice che fa il log, isolato in un programma a
> parte  funziona. Il  resto  del  programma senza  le  funzioni di  log
> funziona.

Boh... :)

> Allego in ogni caso funzione di log:

Ti allego un restyling del codice, prova a vedere se cambia qualcosa...
-- 
     ______________      
    /\             \     
    \_| ciao ciao, |      A camel is a horse designed by a committee.
      |   cesco    |                  -- In Financial Times 31 Jan. 1976
      |   _________|_     
       \_/___________/    
-------------- parte successiva --------------
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

typedef struct{
  int Cont;
  FILE *FileLog;
} Robo;

void myclose(FILE* FileLog){
  if (FileLog != NULL)
    {
      fclose(FileLog);
      FileLog = NULL;
      printf("Chiuso file di log.\n");
    }
}

FILE* myopen(){
  char NomeFile[40];
  time_t Secondi = time(NULL);
  strftime(NomeFile, 40, "/msc/Log/%Y%m%d%H%M%S.txt", localtime(&Secondi));
  printf("Nome file %s\n", NomeFile);
  FILE *FileLog = fopen(NomeFile, "a+");
  if (FileLog == NULL)
    {
      printf("Nuovo file %s\n", NomeFile);
      FileLog = fopen(NomeFile, "w");
      if (FileLog == NULL)
	{
	  printf("Impossibile aprire file di log.\n");
	}
    }
  else
    printf("File aperto.\n");

  return FileLog;
}

void mywrite(Robo *coso, char *Dati){
  char Buffer[40];
  time_t Secondi = time(NULL);
  printf("Cont %d\n", coso->Cont);
  if (coso->FileLog != NULL)
    {
      wd.Kick();
      if (coso->Cont >= 30000)
	{
	  myclose(coso->FileLog);
	  coso->FileLog = myopen();
	  coso->Cont = 0;
	}
      strftime(Buffer, 40, "%Y%m%d%H%M%S;", localtime(&Secondi));
      fprintf(coso->FileLog, Buffer);
      fprintf(coso->FileLog, Dati);
      wd.Kick();
      (coso->Cont)++;
    }
}


int main(){
  char *Dati = "blablabla\n";

  Robo *coso = malloc(sizeof(Robo));
  coso->Cont = 0;
  coso->FileLog = myopen();

  int i;
  for (i = 0; i < 100000; ++i)
    mywrite(coso, Dati);

  free(coso);

  return 0;
}


Maggiori informazioni sulla lista montellug