2

私は基本的にプログラムの標準出力(printf()など)を別のプロセス/スレッドにキャプチャする小さなライブラリを作成しています...このプロセスは特定のタスクを実行する必要があります(たとえば、これらのキャプチャされた出力をファイルに書き込む) ...私は本格的なCプログラミングを始めたばかりなので、まだ学習中です。

これを行うための最良の方法を知りたいと思いました。つまり、プロセスまたはスレッドを使用することを意味します...これらのprintf()ステートメントをキャプチャするにはどうすればよいですか...また、このライブラリは、プログラムによって生成された場合、子プロセスを処理する必要があります。 。一般的な仮定は、それを使用するプログラムがスレッド化されたものであるため、どのようなアプローチを取るべきかということです。

4

2 に答える 2

4

プログラムまたはライブラリでプログラムを起動し、その出力をキャプチャする場合は、popen(3) を参照してください。プログラムからの出力を読み取ることができる FILE ポインターが提供されます。

于 2009-12-29T23:36:50.420 に答える
0

別のプログラムから STDOUT を取得する最も簡単な方法は、(コマンドラインの ">" または "|" 演算子を使用して) プログラムの STDIN に単純にパイプすることです。基本的に、C ライブラリでは、scanf や gets など、使用している STDIN 関数を使用して STDIN から読み取る必要があります。

これは、Unix/Linux の世界では非常に標準的な規則です。プログラムは、STDIN から読み取られ、適切にフォーマットされた方法で STDOUT に書き込まれるため、コマンド ラインにパイプを追加するだけで、さまざまなプログラムを一緒にパイプライン処理できます。たとえば、次のようになります。

grep "somestring" file1 file2 file3 | cut -d, -f1 | sort | uniq
于 2009-12-29T23:31:04.527 に答える