2011-11-08 10 views
0

私は主にビデオ処理に使用されるC++プログラムを持っています。プログラムの中で、私はsystemコマンドを起動して、処理されたビデオをいくつかの他のバイナリに渡して後処理します。C++ - システムコマンド

私はループを無限に向けており、毎回ループの中でシステムコマンドを起動しています。問題は、ある時点で、systemコマンドから-1のリターンコードを受信して​​いることです。その理由は何でしょうか?

システムコマンドの中で、私はメインプロジェクトの適切なパラメータを持つバイナリファイルを呼び出しています。

私が実行したいsystemコマンドは実際にはシェルファイルです。 このファイルでは、ビデオから主な機能を抽出し、3DパーティライブラリからSVMモデルに渡して、目的の分類を取得します。

./LiveGestureKernel ./Video ./SvmVideo 
./mat4libsvm31 -l SvmVideoLabels <SvmVideo> temp_test_file 
./svm-predict temp_test_file svm_model temp_output_file 
cat < temp_output_file 
rm -f temp_* 

は、whileループを通る反復の一定数の後、それだけでスクリプトファイルを実行しないであろうと、私はその理由を把握することはできません。ありがとう!

+1

これは環境によって異なりますが、実行中のプログラムが-1を返している可能性があります。 –

+0

戻りコードは実行しているものによって異なります。もっと情報が必要です。 –

+0

'system'ライブラリ呼び出しに関する情報を調べようとしましたか? –

答えて

3

あなたはsystem()への呼び出しから-1を取得する場合は、まずerrnoの内容を調べる必要があります - 最も可能性の高い特定の問題が何であるかを教えてくれますよう。

注意しなければならないのは、systemの戻り値はNULL以外のコマンドを渡す場合の実装定義の値なので、-1が実際の実行可能ファイルから来ている可能性があります。

この場合、失敗したときに実行されているコマンド(おそらくすべて)を印刷するか、ログをとることをお勧めします。実行時に同じ引数がどのように発生するかを確認できますコマンドラインまたはシェルから直接実行できます。