1

Linuxでこのコマンドを実行すると

zcat bigFile | head

次に、zcatすべてを解凍するのではなく、必要なデータbigFileを提供するために必要なだけ解凍headします。

しかし、これはどうですか

QProcess *process = new QProcess(this);
process->start("zcat bigFile");
process->readLine();
QTimer::singleShot(10000, process, SLOT(terminate()));

zcatで実行されるコマンドは、process必要なものだけを解凍しreadLine()ますか? それともzcat bigFile10秒連続?

QProcessLinux pipe と同様に、要求された数の行|だけを使用することは可能zcatですか?

4

2 に答える 2

1

QProcess で start() を呼び出すと、端末と同様に zcat プログラムが実行されます。これは Qt プログラムとは別のプロセスであるため、Qt アプリケーションから独立して自由に実行できます。提供されたコードの場合は、10 秒後に終了するまで実行されます。

アプリケーションが zcat からの出力を読み取ることを選択するかどうかはユーザー次第ですが、それでも実行は継続されます。

また、処理の直後に process->readline() を呼び出すのは、おそらくプロセスを処理する最善の方法ではないことに注意してください。プログラムは、データの準備が整う前に出力ストリームを読み込もうとする可能性があるからです。代わりに、readline() の前に waitForReadyRead() を呼び出すか、スロットを QProcess の readyRead() シグナルに接続し、そのスロットから readline を呼び出す必要があります。

---- 編集済み ----- 質問への変更に基づく: -

パイプコマンドの要点を見逃していると思います。私が理解しているように、すべてのファイルは zcat によって解凍されますが、その出力は head コマンドにリダイレクトされます。head コマンドは、ファイルの最初の行数しか表示しないため、最初の部分しか表示されません。

これは、ファイル test.txt を持ってコマンドを呼び出すようなものです: -

cat test.txt | head

ファイル全体が存在しますが、head には最初の数行しか表示されません。

于 2013-08-07T07:57:16.420 に答える