zcat 1行ずつファイル? [閉鎖]

zcat 1行ずつファイル? [閉鎖]

ファイルを1行ずつ読み取るC ++アプリケーションを作成しました。 1行を読んで処理し、次の行を読みます。

私はgzip圧縮ファイルのサポートを追加し、C ++解凍ライブラリを使用する代替案を探しています。 1つの解決策は、ファイル全体を解凍し、通常どおりに読むことです。

zcatしかし、私は非常に大きなファイルを扱っていますが、ファイルの最初の行をすぐに解凍して、迅速な開始時間を持つことを好みます。問題は、選択されていないままにzcatしておくと、私のアプリケーションが追いつくことができないほどファイルの圧縮が早すぎます。です。

zcat一時停止するか、一度に1行ずつ読み、ユーザーが指示したときにのみ進むように指示できますか?

ベストアンサー1

以下はマニュアルページで引用されました。パイプ(7)

パイプ容量

パイプラインの容量は制限されています。パイプがいっぱいになると、write(2)はO_NONBLOCKフラグが設定されているかどうかに応じてブロックまたは失敗します(下記参照)。実装ごとにパイプライン容量の制限が異なります。アプリケーションは特定の容量に依存してはいけません。アプリケーションは、読み取りプロセスでデータが利用可能になるとすぐに、それを使用して書き込みプロセスがブロックされたままにならないように設計する必要があります。

2.6.11より前のLinuxバージョンでは、パイプ容量はシステムページサイズ(たとえばi386の4096バイト)と同じでした。 Linux 2.6.11以降、パイプ容量は65536バイトです。

このパイプには特定の容量がありますが、最新のLinuxカーネルではおそらく64kです。その容量に達すると、読み取り呼び出し後にスペースが使用可能になるまですべての書き込みがブロックされます。したがって、通常、zcat your_file.gz | your_program特定の時間に圧縮されていないファイルは64kしかないため、メモリ使用量を心配する必要はありません。

おすすめ記事