system()を介した外部プログラムの実行が正しく実行されません
質問
system()呼び出しでコマンドを呼び出して、コードからプログラム(ncbi blast、知る必要がある人向け)を呼び出そうとしています。
シェルで文字列を直接実行すると、意図したとおりに動作しますが、system()を介して同じ文字列を試行すると、プログラムは意図した結果を返さずにはるかに高速に戻ります。出力ファイルは作成されますが、ファイルサイズは0です。返されるエラーコードも0です。"> output.log 2> error.log"しかし、これらのファイルは作成されません。
環境変数またはパスと関係があると思います...
出力ファイル名は、出力リダイレクトではなく、-oコマンドラインパラメーターで指定されます。
popenコマンドがユースケースにより適している可能性があることを読みましたが、見つかりません。どのライブラリのライブラリですか?
解決
このような問題の最も一般的な原因は、〜/ .bashrc
の環境変数設定が正しくないことです。
実行すると、 ncbi
の不満を確認できます
$SHELL -c '<exact string you pass to system()>'
これをデバッグするもう1つの一般的な方法は、 strace
を使用することです。実行:
strace -fo /tmp/strace.out ./myProgram
そして /tmp/strace.out
で手がかりを探します。
他のヒント
fork
や exec
をしたくない理由はありますか?これは、あるプロセスを別のプロセスから実行するための一般的なイディオムです。
popenは標準Cライブラリにあります manページを見る
いくつかの簡単な質問:
- シェルでどのように実行しますか?
- システムコマンドでどのように実行しますか?
- システムから返される値は何ですか?
ターミナルからの正確なコピーと貼り付けは、英語の説明よりも望ましいです。
所属していません StackOverflow