Tk::fileevent works like you want, because everytime the file is written to by your c program, the fileevent fires and inserts it into the display.
and the test pumper script#!/usr/bin/perl # tktail pathname use warnings; use strict; use Tk; #usage tktail z.log my $pid = open(H, "tail -f -n 25 $ARGV[0]|") or die ; my $mw = MainWindow->new; $mw->fontCreate('big', -family=>'courier', -weight=>'bold', -size=>int(-24*24/14)); my $t = $mw->Text(-width => 80, -height => 25, -wrap => 'none', -bg => 'lightyellow', -font => 'big')->pack(-expand => 1); $mw->fileevent('H', 'readable', [\&fill_text_widget, $t]); $mw->OnDestroy(\&quitCB); MainLoop; sub fill_text_widget { my($widget) = @_; my $text = <H>; $widget->insert('end', $text); $widget->yview('end'); } # end fill_text_widget sub quitCB { kill 9,$pid or die $!; exit; }
#!/usr/bin/perl use warnings; use strict; # pumps the file for testing $| = 1; open (ZH, "> z.log") or die "$_\n"; # autoflush ZH my $ofh = select(ZH); $| = 1; select($ofh); while(1){ print ZH time."\n"; print '#'; #action indicator select(undef,undef,undef,.1); }
In reply to Re: Printing a refreshed file in Perl Tk
by zentara
in thread Printing a refreshed file in Perl Tk
by kkma
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |