2017-06-21 12 views
0

私はposix popen()関数を介してプロセスをオープンしています。例えば。 gitのプッシュ、MKDIR X、等文字列にC++読み込みpopenエラー出力

私はこのようなバッファにそれを記憶することによって、容易にこれらのコマンドの出力を読むことができます:

#include <iostream> 
#include <stdio.h> 

using namespace std; 

int main() { 

FILE *in; 
char buff[512]; 

if(!(in = popen("mkdir x", "r"))){ 
    return 1; 
} 

// fgets stores the output into buff 
while(fgets(buff, sizeof(buff), in)!=NULL){ 
    cout << buff; 
} 
pclose(in); 

return 0; 

} 

しかし、エラーがプロセスである場合、例えばmkdirが失敗した場合は、エラーを文字列または文字バッファに読み込みます。

ただし、上記のコードでは、エラーが発生した場合、エラーはバッファに格納されません。私はエラーが標準入力の代わりに標準エラーにリダイレクトされるためだと思います。

上記のコードを変更して、bash /プロセスから返されたエラーメッセージを取得するにはどうすればよいですか?

答えて

2

あなたはpopenメソッド呼び出しでリダイレクトを指定することができます。

popen("mkdir x 2>&1", "r") 

あなたは、バッファからのエラーメッセージを読むことができると思います。

+0

通常の出力(エラーがない場合)をバッファに取り込みますか? –

+0

@DramaticStackoverflowPirateはい。 '2>&1'はstderr(2)をstdout(1)に書き込むことを意味しますが、stdoutを落とさず、効果的に2つを結合します。 –

関連する問題