2008-09-15 8 views
7

Je souhaite surveiller un fichier journal dans lequel une application est en train d'écrire. Je veux traiter le fichier ligne par ligne comme, ou peu de temps après, il est écrit. Je n'ai pas trouvé un moyen de détecter qu'un fichier a été étendu après avoir atteint eof.La lecture des données d'un fichier journal en tant qu'application séparée est en cours d'écriture

Le code doit fonctionner sur Mac et PC, et peut être dans n'importe quelle langue, même si je suis plus familier avec C++ et Perl.

Quelqu'un at-il une suggestion pour la meilleure façon de le faire?

Répondre

6

En Perl, le module File::Tail fait exactement ce dont vous avez besoin.

3

assez générique réponse:

La plupart des langues, sur EOF, retour qu'aucune donnée n'a été lu. Vous pouvez réessayer de lire après un intervalle, et si le fichier a grandi depuis, cette fois le système d'exploitation retournera des données.

2

Vous devriez être en mesure d'utiliser la lecture io standard à partir de la queue -f

3

Le Essense de tail -f est la boucle suivante:

open IN, $file; 
while(1) { 
    my $line = <IN>; 
    if($line) { 
    #process line... 
    } else { 
    sleep(1); 
    seek(IN,0,1); 
    } 
} 
close IN; 

L'appel seek est d'effacer le drapeau EOF.

0

Je pensais sortir les actions via tee, et de là tailing (ou en utilisant la boucle above) le fichier créé par tee un peu d'utilisation.

Questions connexes