2009-06-09 6 views
0

Je dois écrire des données de journal système (généralement pas plus de 100 caractères à la fois) dans un fichier journal basé sur des événements particuliers. Mais la taille de ce fichier journal est faible (environ 4 Ko, par exemple), et je dois envelopper les journaux lorsque la taille du fichier atteint la limite. Tout en entourant, j'ai besoin de préserver les dernières informations, et plus tard le présenter dans l'ordre chronologique comme il a été écrit dans le fichier. Quelle est la meilleure façon de procéder? Je veux éviter de faire des copies du fichier pour le faire.Écriture de données dans un fichier texte de taille restreinte en C

Répondre

7

Pour écrire dans un fichier restreint:

call ftell to find out where you are in the file 
call fwrite to write as much as you can, with respect to restricted size 
if you couldn't write the whole message 
    call fseek to return to the start of the file 
    call fwrite to write the remainder of the message 

Pour répondre à vos exigences modifiées, vous devez utiliser un fichier basé sur des enregistrements. Choisissez la taille d'arecord légèrement plus grande que le plus grand message et donnez un timestamp à chaque message. L'algorithme que j'ai décrit fonctionne toujours, sauf que vous revenez au début si vous ne pouvez pas écrire le message entier. Vous aurez également besoin d'écrire une petite application pour lire le fichier et présenter le contenu dans l'ordre chronologique.

Vous pouvez également étudier l'utilisation d'une bibliothèque de journalisation existante, telle que log4c.

+0

J'étais sous l'impression que la valeur de retour ftell pourrait ne pas être le nombre exact d'octets depuis le début du fichier. –

+0

Ce sera le cas si vous ouvrez le fichier en mode binaire. –

+0

@Neil: J'ai entendu dire que les systèmes d'exploitation les plus modernes ignorent le drapeau "b" lors de l'ouverture des fichiers et les ouvrent en mode binaire, mais maintenant que j'essaie de vérifier la validité de cette requête, rien ne semble apparaître. Savez-vous si c'est vrai? – dreamlax

Questions connexes