純粋な C を使用して別のプロセスの出力をキャプチャするにはどうすればよいですか? サンプルコードを提供できますか?
編集:Linuxを想定しましょう。「かなり移植性の高い」コードに興味があります。私がやりたいことは、コマンドを実行し、その出力をキャプチャして、何らかの方法で処理することだけです。
いくつかのオプションがありますが、プラットフォームによって多少異なります。つまりpopen
、ほとんどの場所で機能するはずです。
#include <stdio.h>
FILE *stream;
stream = popen("acommand", "r");
/* use fread, fgets, etc. on stream */
pclose(stream);
これには非常に特殊な用途があることに注意してください。コマンドを実行してプロセスを作成しacommand
、ストリームを介してプログラムからアクセスできるようにするなどの方法で標準出力を接続しますFILE*
。
既存のプロセスに接続する必要がある場合、またはより豊富な操作を行う必要がある場合は、他の機能を調べる必要がある場合があります。Unix には、プロセスの stdout などを接続するためのさまざまなメカニズムがあります。
ウィンドウでは、CreateProcess
API を使用して新しいプロセスを作成し、その標準出力ハンドルを必要なものに接続できます。Windows もサポートしていますpopen
。
ただし、私が知っている単純な C の方法はありません。そのため、常にプラットフォーム固有の API に多少依存しています。
あなたの編集に基づいてpopen
理想的だと思われ、それは「かなり移植可能」です。それなしではOSのようなUNIXはないと思います。実際、それはSingle Unix Specificationの一部であり、POSIXであり、あなたが望むことを正確に行うことができます。プロセスを実行し、その出力を取得して処理します。
システム パイプを使用できる場合は、他のプロセスの出力を C プログラムに単純にパイプし、C プログラムで標準入力を読み取るだけです。
otherprocess | your_c_program
どのOSを使用していますか? *nix タイプの OS では、プロセスが STDOUT または STDERR に出力されている場合、明らかにパイプを使用できます