effacer le début d'un fichier en evitant une recopie ?

effacer le début d'un fichier en evitant une recopie ? - C - Programmation

Marsh Posté le 17-02-2004 à 01:01:51    

bonjour,
 
dans le cadre de la limitation de la taille d'un fichier de logs, je voudrais donc si la taille maximum du fichier vient a être dépassé mettre les nouvelles lignes a ajouter dans le fichier à la fin du fichier, et effacer les 1eres lignes du fichier. Cela sans mapper tout le fichier en mémoire, ni en copiant le fichier ...
 
La seule solution que j'ai trouvée est de diviser le contenu fichier en bloc, et de copier chaque bloc un emplacement plus haut : le bloc 2 ecrase le bloc 1, le bloc 3 ecrase le bloc 2, etc ...
 
existe-t-il une méthode plus appropriée ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 17-02-2004 à 01:01:51   

Reply

Marsh Posté le 17-02-2004 à 23:00:46    

non

Reply

Marsh Posté le 18-02-2004 à 03:03:36    

Utilie un fichier circulaire.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 18-02-2004 à 10:23:53    

HelloWorld a écrit :

Utilie un fichier circulaire.

:heink:

Reply

Marsh Posté le 18-02-2004 à 10:51:55    

taz>ca veut dire "rond"  :o


---------------
oui oui
Reply

Marsh Posté le 18-02-2004 à 10:57:32    

art_dupond a écrit :

taz>ca veut dire "rond"  :o  

:??:

Reply

Marsh Posté le 18-02-2004 à 11:00:32    

> circulaire
(adjectif et nom féminin)
En forme de cercle.? Qui décrit un cercle.? Orbite circulaire: orbite képlérienne de rayon vecteur constant.? Pratiquement, orbite elliptique d'excentricité très faible.? (Anglais: circular orbit).? [nom féminin] Lettre circulaire ou circulaire: lettre adressée à plusieurs personnes à la fois.
 
> rond,e
(adjectif)
Qui est de forme circulaire ou sphérique.? Arrondi.? Petit et corpulent.? Potelé et rebondi.? [familier] Ivre.? Se dit d'un nombre entier, sans fraction: compte rond.? Sans façon, franc: homme rond en affaires.? [adv.] Tourner rond.


Message édité par art_dupond le 18-02-2004 à 11:01:13

---------------
oui oui
Reply

Marsh Posté le 18-02-2004 à 11:01:50    

tu peux t'expliquer au lieu de faire le con ? j'ai jamais entendu parler de ça :o

Reply

Marsh Posté le 18-02-2004 à 11:03:50    

ben j'essayais juste de t'aider en expliquant le mot circulaire. J'en sais pas plus mais j'essaye de faire avancer le schmilblick, stou :o


---------------
oui oui
Reply

Marsh Posté le 18-02-2004 à 11:05:47    

bon alors je conclue ton intervention
 
ta gueule :o
un fichier rond/circulaire ça n'existe pas

Reply

Marsh Posté le 18-02-2004 à 11:05:47   

Reply

Marsh Posté le 18-02-2004 à 11:09:39    

Peut etre que c'est un fichier binaire qui remplit un cylindre sur le disque et qu'on pourrait lire à partir de n'importe ou.
C'est pit etre une connerie mais le fichier est alors bien circulaire non ?
 
 
 
 :hello:


Message édité par art_dupond le 18-02-2004 à 11:09:57

---------------
oui oui
Reply

Marsh Posté le 18-02-2004 à 11:14:27    

n'importe quoi ... mais alors vraiment ... tant qu'à faire on a qu'a nommer le fichier avec un palindrome comme ça on pourra le lire dans les deux sens ?
 
et puis c'est encore plus n'importe quoi, parce que tu retombes dans le cas problématique d'expligue BG, à savoir qu'en réécrivant à partir du début, tu écrases de manière incohérente le contenu du fichier

Reply

Marsh Posté le 18-02-2004 à 11:15:33    

arf :p
 
 
 
ps: cette fois j'y go vraiment ;)
 
 
 
 :hello:


Message édité par art_dupond le 18-02-2004 à 11:15:51

---------------
oui oui
Reply

Marsh Posté le 18-02-2004 à 11:28:18    

BlackGoddess a écrit :

bonjour,
 
dans le cadre de la limitation de la taille d'un fichier de logs, je voudrais donc si la taille maximum du fichier vient a être dépassé mettre les nouvelles lignes a ajouter dans le fichier à la fin du fichier, et effacer les 1eres lignes du fichier. Cela sans mapper tout le fichier en mémoire, ni en copiant le fichier ...
 
La seule solution que j'ai trouvée est de diviser le contenu fichier en bloc, et de copier chaque bloc un emplacement plus haut : le bloc 2 ecrase le bloc 1, le bloc 3 ecrase le bloc 2, etc ...
 
existe-t-il une méthode plus appropriée ?


 
tu ne pourrais pas écrire tes nouveaux blocs en début de fichier si la limite est dépassée et garder un "pointeur sur le 'vrai' début du fichier" quelque part (par exemple sur la première ligne du fichier) qui te permettrait de resortir le fichier "dans l'ordre" quand t'as besoin de le consulter ?


Message édité par art_dupond le 18-02-2004 à 11:30:23

---------------
oui oui
Reply

Marsh Posté le 18-02-2004 à 12:37:03    

Ta methode est bonne et efficace tant que tu exploites ton fichier de log de maniere interne a ton outil.
Mais si tu veux utiliser ton fichier de log comme un fichier texte ordinaire exploité par des outils externes, sa solution (division du fichier et remontée par blocs) me semble astucieuse et bonne.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-02-2004 à 16:54:46    

ah, oui, merci pour ces réponses, en effet la solution du fichier ciruclaire me parait bien quand la limite est élevée, ca evite de recopier presque tout le fichier a chaque nouvelle ligne de logs :)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 18-02-2004 à 21:34:03    

Ben un fichier circulaire...il revient au debut comme pour un buffer circulaire par ex. C'est classique dans les fic de log.
Faut stocker la date + heure en + au début c'est tout. Faut aussi définir une longueur fixe de ligne (par ex 80), mais rien n'empêche d'enregistrer sur plusieurs lignes. Tu limites à XXX lignes (=> taille) ou alors par période (24h de log). Une fois la fin définie du fichier, on repart au début et écrase les lignes les + vieilles. Ca fait une rotation, c'est circulaire. C'est tout con comme principe.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 18-02-2004 à 23:14:18    

> C'est classique dans les fic de log.  
 
Les fichiers de log unix que je connaisse ont toujours ete ordonnés lorsque je les regardais en mode texte sous emacs, sans que j'aie besoin d'aller au milieu du fichier pour voir ou ils demarraient. Bon, sur que sous unix, la taille etait pas limitée en general, par contre, y'avait souvent une rotation entre qques fichiers de logs successifs (1 par jour de la semaine??) ce qui reproduisait sous certains aspects cette notion de circularité.
 
A+,


Message édité par gilou le 18-02-2004 à 23:21:19

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 19-02-2004 à 00:33:56    

sauf que c'est un script qui manipule des fichiers, qui garde les N plus récents seulement

Reply

Marsh Posté le 19-02-2004 à 08:58:25    

logrotate, ça sert à quoi ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed