Perl Tips: tail -fのエミュレーション
2023/12/23 |
Perl Tips [Prev] [Next] [Perl Top] |
ファイル出力を監視/表示したい
#!perl -w use IO::Handle; use strict; { my $fh; open($fh, "> test0.txt") or die; $fh->autoflush(1); # autoflush 有効 for (my $i=0; $i<20; $i++) { print "$i\n"; # 標準出力 print $fh "$i\n"; # ファイルハンドル sleep(1); # 1秒待ち } print $fh "EOF\n"; # 最後に文字列'EOF'を出力 close($fh); } #!perl -w use Time::HiRes; use strict; { my $fh; # ファイルハンドル my $pos; # ファイルポジション open($fh, "< test0.txt") or die; while(1) { my @data = <$fh>; # 現ポジションから最後までデータ取得(ファイルハンドルはEOFになる) print @data; # 読み出しデータ表示 $pos = tell($fh); # 現読み出し終了ポジション取得 my $join_data = join('', @data); last if ($join_data =~ /EOF/); # EOF文字列を見つけたらループ終了 Time::HiRes::usleep(10*1000); # 10*1000us = 10ms待ち seek($fh, $pos, 0); # 現読み出し終了ポジションへのseekダミー実行で # 真の目的であるファイルハンドルのEOF解除を実施!! } close($fh); } @echo off del test0.txt >nul 2>&1 echo #=======================================# echo # test0.pl: test0.txt Writeプロセス開始 # echo #=======================================# start test0.pl echo. echo #==========# echo # 5秒 wait # echo #==========# timeout /T 5 echo. echo #======================================# echo # test1.pl: test0.txt Readプロセス開始 # echo #======================================# test1.pl >runme.bat #=======================================# # test0.pl: test0.txt Writeプロセス開始 # #=======================================# #==========# # 5秒 wait # #==========# 0 秒待っています。続行するには何かキーを押してください ... #======================================# # test1.pl: test0.txt Readプロセス開始 # #======================================# 0 1 2 ...中略... 18 19 EOF |
Copyright(C) 2023 Altmo
本HPについて |
Perl Tips [Prev] [Next] [Perl Top] |