次のように mingw を使用して popen() を呼び出そうとしています:
#define RUN_COMMAND "\"C:\\Program Files\\CA\\BrightStor ARCserve Backup\\ca_qmgr.exe\" \"-list\""
int main() {
outputPointer = popen(RUN_COMMAND, "r");
...
}
しかし、私はそれを機能させることができません。引用の悪夢だと思います...
win32apiのposixpopenに相当するものを見てください。私_popen()
はずっと前にWindowsでの使用をやめました。純粋なWIN32ソリューションは、はるかに信頼性の高いパフォーマンスを発揮します。
mingwがパラメータをsh -c
の代わりにに渡す場合はcmd.exe /c
、それらの円記号をスラッシュに変更することをお勧めします。次のようなものでうまくいくはずです。
"\"C:/Program Files/CA/BrightStor ARCserve Backup/ca_qmgr.exe\" -list"
popenのmanページによると:
コマンド引数は、シェルコマンドラインを含むnullで終了する文字列へのポインタです。このコマンドは、-cフラグを使用して/ bin/shに渡されます。解釈がある場合は、シェルによって実行されます。
したがって、必要なのは、sh
解析するために文字列をエスケープすることです。引数をエスケープする必要はありません-list
。プログラム名全体を引用符で囲む代わりに、スペースをエスケープすることを試みることができます。私はここでテストするためのWindowsシステムを持っていませんが、私は提案します
#define RUN_COMMAND "C:\\Program Files\\CA\\BrightStor\\ ARCserve\\ Backup\\ca_qmgr.exe -list"
int main() {
outputPointer = popen(RUN_COMMAND, "r");
...
}