2008-09-15 27 views
7

Tôi muốn theo dõi tệp nhật ký đang được viết bởi một ứng dụng. Tôi muốn xử lý dòng tập tin theo dòng, hoặc ngay sau đó, nó được viết. Tôi đã không tìm thấy một cách để phát hiện rằng một tập tin đã được mở rộng sau khi đạt được eof.Đọc dữ liệu từ một tệp nhật ký dưới dạng một ứng dụng riêng biệt được ghi vào nó

Mã cần làm việc trên máy Mac và PC và có thể bằng bất kỳ ngôn ngữ nào, mặc dù tôi quen thuộc nhất với C++ và Perl.

Có ai có đề xuất về cách tốt nhất để làm điều đó không?

Trả lời

6

Trong Perl, mô-đun File::Tail thực hiện chính xác những gì bạn cần.

3

Câu trả lời đủ chung:

Hầu hết các ngôn ngữ, trên EOF, trả lại không có dữ liệu nào được đọc. Bạn có thể thử đọc lại sau một khoảng thời gian và nếu tệp đã phát triển kể từ lần này, hệ điều hành này sẽ trả về dữ liệu.

2

Bạn sẽ có thể sử dụng đọc io tiêu chuẩn từ tail -f

3

Các essense của tail -f là vòng lặp sau:

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

Cuộc gọi seek là để xóa cờ EOF.

0

Tôi đã nghĩ ra các hành động qua tee, và từ đó tail'ing (hoặc sử dụng vòng lặp above) tệp được tạo bởi tee một số sử dụng.

Các vấn đề liên quan