2

perlスクリプトを介して各行にタイムスタンプを付けて毎秒vmstatを出力する次のコマンドラインがあります。

vmstat 15 | /home/Beer/addtimestamp.pl > File_1 

addtimestamp.pl の内容:

!/usr/bin/perl
while (<>) { print localtime() . ": $_"; }

では、出力が「File_1」ファイルにリダイレクトされないのはなぜでしょうか?

そうしないと完全に機能し、毎秒完全に出力を出力し、まったく問題はありません。

4

1 に答える 1

4

ターミナルに出力するとき、perl の出力は行バッファリングされるため、出力されるすべての行が表示されます。その出力がファイルの場合、ブロックバッファリングされるため、完全なブロックを書き込む準備が整うまで出力は表示されません (4k だと思いますが、可変でシステム定義)。

ラインバッファリングを使用するには、stdout を設定する必要があります。

$|=1;

[perl line buffered output] を検索すると、これに関する多くの結果が表示されます。

于 2012-12-11T07:35:09.197 に答える