Bonjour,

Je dois faire un démon suveillant un fichier de log des scans. Dans ce fichier j'alloue dynamiquement de la mémoire pour mes variables, et je rencontre quelque soucis dans une fonction qui est lancé périodiquement, voici sa sortie:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
Nombre de minutes écoulées depuis le dernier scan: 12 min
date_search: Apr 25 22:04:25
IP: 9.9.9.69
IP2: 99.99.99.69
 
//quelque seconde plus tard second passage dans la fonction:
 
date_search: Apr 25 22:04:25
IP: 9.9.9.692:05:25
IP2: 99.99.99.69
La premier adresse IP semble étre écrasser par une autre donnée . J'ai eu beau faire des free de toutes les variables et les réallouer au début de la fonction ca n'a rien changer. Pouvez vous m'expliquer ce cas ?

Voici la fonction en cause:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
 
int startDeamon()
{
 
  struct stat mystat;
  char *IP=NULL, *date_search=NULL, *date_lastModif=NULL, *date_lastScan=NULL, *SRCip={"SRC"}, *buff_file=NULL;
  FILE *file_ulog=NULL, *file_out=NULL, *file_log=NULL;
  int nbSec;
  time_t t;
 
  printf("Go\n");
 
  //récupère l'heure courante
  time(&t);
 
  file_log=fopen(LOG_FILE,"a");
    if (file_log < 0) exit(1);
 
  file_ulog=fopen(FILE_ULOG,"r");
  	if (file_ulog<0) exit(1);
 
  file_out=fopen(FILE_OUT,"r");
  	if (file_out<0) exit(1);
 
  date_search=smalloc(24);
 
  date_lastScan=smalloc(24);
 
  date_lastModif=smalloc(24);
 
  //On recupère la date de la derniere modification du fichier de log d'ulog 
  if ( stat(FILE_ULOG, &mystat) == -1) { perror("stat"); exit(EXIT_FAILURE);} 
  strftime(date_lastModif, 100, "%c", localtime(&mystat.st_mtime));
 
  //on test si le fichier existe  
  if ( file_out == NULL )
  {
    //On créé le fichier puis on ecrit la date du dernier accès
    file_out=fopen(FILE_OUT,"w+");
    if ( fwrite(date_lastModif, strlen(date_lastModif), 1, file_out) < 1 ) perror ("Erreur fwrite 1");
 
    //On copie la date dans la seconde variable
    strcpy(date_lastScan, date_lastModif);
 
  }
  else
  {
 
    //Le fichier existe on lit la date 
    int ret = fread(date_lastScan, 24, 1, file_out); 
 
  } 
 
  printf("date_lastScan %s, date_lastModif %s\n" ,date_lastScan, date_lastModif);
 
  // Exécution de la fonction "compareDate"
  nbSec=compareDate(date_lastScan, date_lastModif);
 
  printf("Nombre de minutes écoulées depuis le dernier scan: %d min\n", nbSec/60);
 
  //Si le nombre de secondes est supérieur 0 un scan a été effectué. 
  if ( nbSec > 0 )
  {  
 
    strcpy(date_search, substr(date_lastScan, 4, 18));
 
    //Recherche de la derniere date d'un scan (si elle existe) et copie des autres lignes en mémoire
    //Ou lieu de charger tous le fichier en mémoire
 
    //On charge le fichier en mémoire
    buff_file=LoadFileToMemory(file_ulog);
 
    //On recherche la date dans d'ulog le fichier et on retourne sa position dans le fichier
    buff_file = Ulog_Search(buff_file, date_search);
    printf("date_search: %s\n", date_search);
 
    if( buff_file == NULL)
    { 
      printf("Date introuvable\n");
      exit(1);
    }
 
    //On recherche l'ip source
    IP=getip(buff_file);
    if( IP == NULL)
    { 
      printf("IP introuvable\n");
      exit(1);
    }
 
    printf("IP: %s\n",IP); 
 
    buff_file = Ulog_Search_END_LINE(buff_file);
 
    while( buff_file != NULL )
    {
       date_search=Ulog_get_date(buff_file);
 
       IP=getip(buff_file);
       printf("IP2: %s\n", IP);
 
       buff_file=Ulog_Search_END_LINE(buff_file);
 
    }
 
    //file_out=fopen(FILE_OUT,"w+");
    //	if ( fwrite(date_lastModif, strlen(date_lastModif), 1, file_out) < 1 ) perror ("Erreur fwrite 1");
 
  }
  else
  {
     printf ("Le fichier n'a pas été modifier\n" );
  }
 
  free(date_search);
  free(date_lastModif);
  free(date_lastScan);
 
  date_search=NULL;
  date_lastModif=NULL;
  date_lastScan=NULL;
 
  if(file_ulog != NULL)
    fclose(file_ulog);
 
  if(file_out != NULL)
    fclose(file_out);
 
 
  //Attention les données ne sont écrites dans les fichier qu'apres le close
  if(file_log != NULL) 
    fclose(file_log);
 
  return 0;
}
Et le code de ma fonction servant à allouer de la mémoire dynamique:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
char *smalloc(int stringsize)
{
 
  char *buffer;
 
  buffer=malloc(stringsize + 1);
  if ( buffer == NULL )
  {  
    fprintf ( stderr, "ERREUR D'ALLOCATION !!");
    return NULL;
  }
 
  memset(buffer, 0, sizeof(buffer));
 
  return buffer;
}
Merci :-)