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

  FORUM HardWare.fr
  Programmation
  C

  méthode optimisée d'écriture dans un fichier log

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

méthode optimisée d'écriture dans un fichier log

n°685532
Riot
Buy me a riot
Posté le 27-03-2004 à 11:48:30  profilanswer
 

slt à tous!
alors voilà: je code en ce moment une appli (sous Linux) comprenant 3 process, et je voudrais enregistrer tout ce qu'il se passe dans un fichier log.
ex:
[pid_process]Nom_Fonction_Appelante--Malloc OK
...
 
pour cela j'ai créé un ti TAD erreur:

Code :
  1. dans mon .h:
  2. #define MALLOC_OK 1
  3. #define MALLOC_ERROR -1
  4. ...
  5. void log(char* strFctAppelante, int iErrNo);


 

Code :
  1. dans mon .c:
  2. void log(char* strFctAppelante, int iErrNo)
  3. {
  4. FILE* file;
  5. file = fopen("log", "a" );
  6. switch(iErrNo)
  7. {
  8.   case -1:{
  9.            fprintf(file, "[%d]%s--Malloc Error!\n", getpid(), strFctAppelante);
  10.            break;
  11.           }
  12.   case 1:{
  13.            fprintf(file, "[%d]%s--Malloc OK\n", getpid(), strFctAppelante);
  14.            break;
  15.           }
  16.   ...
  17. }
  18. fclose(file);
  19. }


 
sauf que le pb, c'est qu'au fur et a mesure que mon appli grandit, il y a de + en + d'infos à mettre en log.
je me suis donc rendu compte que l'ouverture/fermeture du fichier prennait trop de tps! et n'était pas optimal...
 
j'ai donc songé (un cours instant) a mettre mon descripteur de fichier en SHM... mais non.
 
une solution serait peut-être de faire une variable globale "FILE* file", je ne trouve pas ça très propre!
 
alors est-ce qqun ici aurait déjà été confronté au pb???
 
ps: j'ai trouvé dans un bouquin de progra C en Systeme d'Exploitation une fonction qui permettait d'écrire dans le fichier log de Linux /var/log/messages, seulement le pb qu'il faut les droits root pour lire ce fichier...
 
merci de votre attention!
;)

mood
Publicité
Posté le 27-03-2004 à 11:48:30  profilanswer
 

n°685536
Taz
bisounours-codeur
Posté le 27-03-2004 à 12:02:00  profilanswer
 

trouve autre chose, 3 process qui écrivent en même temps dans le même fichier, ça va faire boom

n°685542
cricri_
Posté le 27-03-2004 à 12:18:46  profilanswer
 

Ben avec l'équivalent des Mutex ça doit être possible de sécuriser ça, non ?

n°685543
Taz
bisounours-codeur
Posté le 27-03-2004 à 12:20:10  profilanswer
 

en shm oui
sinon tu fais des com par socket avec un process logger
 
dis, juste comme ça, tu log les erreurs de malloc pourquoi ? u fais quoi quand malloc échoue ?

n°685580
Riot
Buy me a riot
Posté le 27-03-2004 à 13:36:45  profilanswer
 

socket: connais po...
pour les erreurs: pour l'instant mon process 'sécurité' étant en charge de checker tout ça n'est pas encore en place, mais à terme, il enverra un SIG a un autre process qui fera quitter les autres process correctement (détachement de SHM et tt le tralala...)
 
pour les mutex: je suis pas sûr de savoir ce que c'est... c'est comme un sémaphore c ça??
si c'est le cas, si je pose un sem sur mon fichier log, les autres process ne pourront pas écrire dedans, ce qui ralentira encore plus mon appli (je précise que mon appli est simili temps réel!!!).
 
pour la SHM: si mon process 'maitre' créé la SHM avec le descripteur, que les 2 autres process s'y attache, est-ce que le fichier log sera ouvert pour eux aussi???
De plus (en faisant qques essais peut-être maladroits), l'écriture dans le fichier log sera-t-elle effective si ce fichier n'est pas fermer quand ma fonction log(...) est terminée???
 
thx

n°685581
Taz
bisounours-codeur
Posté le 27-03-2004 à 13:37:51  profilanswer
 

socket :o
 
edit: toutes façons, qui te parle de mettre le descripteur en shm ? juste un buffer, le classqie producteurs/consommateur


Message édité par Taz le 27-03-2004 à 13:43:20
n°685591
Riot
Buy me a riot
Posté le 27-03-2004 à 14:13:14  profilanswer
 

sinon les questions c'est bien là où ya des '?' (moi je mets mm des '???' pour être sûr...) [:axlrose]

n°685592
Taz
bisounours-codeur
Posté le 27-03-2004 à 14:15:19  profilanswer
 

ben je te dis de dédier un process à l'écriture du log : la communication doit se faire soit par shm (le process logger prends alors en charge, la création et la destruction) ou par socket

n°685695
Riot
Buy me a riot
Posté le 27-03-2004 à 20:11:03  profilanswer
 

non pas de process supplémentaire (imposé)

n°685697
Taz
bisounours-codeur
Posté le 27-03-2004 à 20:14:26  profilanswer
 

alors ce n'est pas possible. il te faut un mutex en shm est réouvrir écrire fermer systèmatiquement le fichier

mood
Publicité
Posté le 27-03-2004 à 20:14:26  profilanswer
 

n°685724
Riot
Buy me a riot
Posté le 27-03-2004 à 20:53:36  profilanswer
 

pourtant ça passe à la bourrin!!! (je c c'est pas une raison)
je veux dire que mes 3 process accèdent au fichier sans pb.
dis-moi si je comprends bien: le mutex servirait a protéger le fichier de façon à ce qu'il n'y ait qu'un seul process qui y écrive à la fois???

n°685725
Taz
bisounours-codeur
Posté le 27-03-2004 à 20:58:49  profilanswer
 

oui, ça marche, jusqu'au jour ou ...

n°685726
cricri_
Posté le 27-03-2004 à 21:06:32  profilanswer
 

vi, dangereux sans mutex ..


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

  méthode optimisée d'écriture dans un fichier log

 

Sujets relatifs
[RESOLU][VB6] Lire un fichier texteimporter fichier texte dans feuille excel?
Importer fichier access sous visual BAsicrecupperer le path d'un fichier et le stocker dans excel
Stockage de fichier via un formulairedeterminer la taille d'un fichier [résolu]
Execution d'un fichier .exe a partir du c++Une Methode de Detection optimale et implementable sous OpenGL?
hebergeur avec re-ecriture d'url !verifier l'existence d'un fichier a partir de vba
Plus de sujets relatifs à : méthode optimisée d'écriture dans un fichier log


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