2008-09-15 16 views
7

Me gustaría controlar un archivo de registro que está siendo escrito por una aplicación. Quiero procesar el archivo línea por línea como, o poco después, se escribe. No he encontrado una forma de detectar que un archivo se ha extendido después de llegar a eof.Leer datos de un archivo de registro como una aplicación por separado está escribiendo en él

El código debe funcionar en Mac y PC, y puede ser en cualquier idioma, aunque estoy más familiarizado con C++ y Perl.

¿Alguien tiene alguna sugerencia sobre la mejor manera de hacerlo?

Respuesta

6

En Perl, el módulo File::Tail hace exactamente lo que necesita.

3

Una respuesta lo suficientemente genérica:

mayoría de los lenguajes, en EOF, retorno que se leyeron datos. Puede volver a intentar leer después de un intervalo, y si el archivo ha crecido desde entonces, esta vez el sistema operativo devolverá los datos.

2

Usted debe ser capaz de utilizar leer el io estándar de tail-f

3

La esencia de tail -f es el bucle siguiente:

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

La llamada seek es limpiar la bandera EOF.

0

Hubiera pensado en la salida de las acciones a través de tee, y de ahí tail'ing (o utilizando el loop above) el archivo creado por tee algún uso.

Cuestiones relacionadas