サーバーからデータをストリーミングして行を書き込むコマンドがありますstdout
。多数のレコードをパイプしたいのですが、less
ユーザーが次のページに移動するまで、私のツールがデータをストリーミングし続けないようにしたいと思います。それ以外の場合、ツールはユーザーが表示する前に大量のデータをダウンロードし続けます。
less
ユーザーが次のページに移動するまで、入力プロセスが標準出力に書き込むのをブロックしますか、それとも入力less
全体をどこかにバッファリングしようとしますか?
less
後者の場合、フラグまたはコードのいくつかの実装の詳細を使用して動作を前者に変更できますか?それとも、独自のページングシステムを実装する必要がありますか?
ベストアンサー1
Less は入力内容をゆっくり読みます。必要な部分だけを読んでください。入力がパイプの場合、パイプに書き込むプログラムは、パイプの固定サイズバッファ(通常512Bから数kB)を埋めると最終的にブロックされます。
ユーザーが検索や検索の失敗など、ファイルの末尾に到達する必要があるコマンドを使用すると、>
怠惰が停止します。これらの要求を満たすには、ファイルの最後まで読んでください。入力が無限の場合(パイプに書き込むプログラムが永久に書き込まれるため)、要求は完了しません。
コマンドが長すぎると、ユーザーはを使用してコマンドを中断できますCtrl+C。これにより、入力が閉じられる回数が少なくなり、パイプバッファがいっぱいになると、パイプに書き込むプログラムがSIGPIPE信号を受信することを意味します。割り込みを使用した後にCtrl+C入力がパイプから来る場合、入力の読み取りを再開する方法はありません。