Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1247 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Garder les dernieres lignes d'un fichier texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Garder les dernieres lignes d'un fichier texte

n°857643
fluminis
Posté le 25-09-2004 à 17:47:35  profilanswer
 

Bonjour à tous,
 
Voila je réalise une application en C/C++ sous unix et j'ai une fonction de log qui se charge d'écrire dans un fichier tous les messages d'erreur qui surviennent...
 
Mais le probleme est que je ne veux pas que le fichier texte devienne enorme, seules les dernieres lignes (peut etre quelques centaines de lignes qd meme) sont importantes.
 
je voudrais que l'application face l'equivalent de la commande :
tail -1000f log.txt > log.txt
 
mais comment faire ca en C ou C++ ?
 
Merci d'avance

mood
Publicité
Posté le 25-09-2004 à 17:47:35  profilanswer
 

n°857655
HelloWorld
Salut tout le monde!
Posté le 25-09-2004 à 18:11:54  profilanswer
 

Tu lis les lignes que tu veux, tu écrases ton fichier en créant un nouveau dans lequel tu écris les lignes lues auparavant (=> ce que tu as écris)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°857664
fluminis
Posté le 25-09-2004 à 18:17:32  profilanswer
 

tu lirais tout en memoire et re-creerais le fichier... oui pkoi pas c'est une solution
 
Y a t-il des risque de surcharger la memeoire du serveur en faisant ca ? (mon appli est censée tourner 24/24 sur un serveur et il doit etre short au nivo de la ram), tu me diras ca depend du nombre de lignes mais si j'ai conserve entre 1000 et 2000 lignes ?

n°857672
HelloWorld
Salut tout le monde!
Posté le 25-09-2004 à 18:30:10  profilanswer
 

Oui ca depend du nombre de lignes, sinon c'est fichier temporaire, ou alors du non portable : tu lis la fin du fichier, tu la recopie au début, et "racourci" la taille du fichier. C'est le "racourcissement" qui n'est pas portable (spécifier la nouvelle taille du fichier).
Mais bon, disons 10000 lignes de 100 caractères, ça fait 1Mo, en surévaluant large. Si ton server meurt pour 1Mo...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°857674
fluminis
Posté le 25-09-2004 à 18:35:57  profilanswer
 

j'espere qu'il ne va pas mourir mon serveur, j'y tiens ;)
qu'entends tu par du non portable ? il n'y a pas de fonction toute faite pour raccourcir le fichier c'est ca...
bin sinon ta solution de réécrire au debut du fichier peut surement etre envisageable... je vais reflechir a la question
merci

n°857677
HelloWorld
Salut tout le monde!
Posté le 25-09-2004 à 18:37:27  profilanswer
 

Si y'a une fonction, mais c'est propre à ton OS, et c'est pas en standard C/C++. Donc ton prog risque de ne pas compiler sur d'autres OS...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°857683
Taz
bisounours-codeur
Posté le 25-09-2004 à 18:51:30  profilanswer
 

putain mais vous êtes tous des incapables !
 
c'est pas au soft lui même de gérer les logs !
 
fluminis > install logrotate sur ton serveur, configure le, et il va te faire tout seul comme un grand la rotation compactage des logs, de manière transparente (et oui, il se passe quoi avec vos bêtises s'il y a des messages lors de la rotation ?)

n°857685
fluminis
Posté le 25-09-2004 à 18:55:40  profilanswer
 

ha ha ha ! tu m'en diras tant. c'est interessant tout ca.
mais alors comment qu'il fait ton soft, car lui aussi il peut etre entrain de faire ses manips, quand le prog ecrit dans le fichier ??
Bon je vais voir ce prog, il m'interesse.

n°857691
Taz
bisounours-codeur
Posté le 25-09-2004 à 19:03:34  profilanswer
 

parce que logrotate manipule les fichiers de telle manière qu'il n'y a pas de problème

n°857712
fluminis
Posté le 25-09-2004 à 19:40:20  profilanswer
 

bon j'opte pour ta solution Taz ! comme ca mon prog n'a plus besoin de gerer tout ca :)
merci

mood
Publicité
Posté le 25-09-2004 à 19:40:20  profilanswer
 

n°858151
ThierryHel
Posté le 26-09-2004 à 17:41:39  profilanswer
 

Pour ma part j'adopte la solution suivante pour les fichiers logs: avant chaque écriture, le prog controle la taille du fichier. S'il a atteint la taille limite fixée, le fichier est renommé. Cela suppose une ouverture/fermeture à chaque écriture : gourmant en ressource. Tout dépend de ton applicatif : multi utilisateur, fonction appelée par plusieurs progs ...
La prochaine écriture de log recreera le fichier log.
Pour ce qui est de la synchro, Unix possède un tas d'outils comme tous OS multi-tache et utilisateur, sémaphore par exemple.

n°858158
Taz
bisounours-codeur
Posté le 26-09-2004 à 18:10:12  profilanswer
 

et t'as pas l'impression que si des softs de rotation de logs exisent, c'est justement pour pas réinventer la roue à chaque fois, laisser le système gérer ça et permettre à l'utilisateur un paramètrage fin ?

n°858159
fluminis
Posté le 26-09-2004 à 18:13:24  profilanswer
 

je pense qu'il faut a la fois utiliser les semaphores puisque mon appli sera multithread pour etre sur que deux thread n'ecrire pas tous les deux en meme temps dans le fichier et utiliser l'outil systeme pour que l'admin du systeme puisse configurer ca comme il veut.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Garder les dernieres lignes d'un fichier texte

 

Sujets relatifs
[C#] Garder une référence vers une variable d'une autre classe ?Texte formaté dans une table Paradox.
Fichier .BATFichier .bat contenant des commandes msdos, faire un retour chariot??
[Reglé] Récupérer ipconfig /all dans un fichier texteRécupérer texte page internet
VBS Word comment remplacer du textefichier batch ds vb + commande shutdown
Ecriture/Lecture de fichier binaire (ios::binary) avec << et >> 
Plus de sujets relatifs à : Garder les dernieres lignes d'un fichier texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR