7

次のように mingw を使用して popen() を呼び出そうとしています:

#define RUN_COMMAND "\"C:\\Program Files\\CA\\BrightStor ARCserve Backup\\ca_qmgr.exe\" \"-list\""
int main() {
    outputPointer = popen(RUN_COMMAND, "r");
    ...
}

しかし、私はそれを機能させることができません。引用の悪夢だと思います...

4

5 に答える 5

4

win32apiのposixpopenに相当するものを見てください。私_popen()はずっと前にWindowsでの使用をやめました。純粋なWIN32ソリューションは、はるかに信頼性の高いパフォーマンスを発揮します。

mingwがパラメータをsh -cの代わりにに渡す場合はcmd.exe /c、それらの円記号をスラッシュに変更することをお勧めします。次のようなものでうまくいくはずです。

"\"C:/Program Files/CA/BrightStor ARCserve Backup/ca_qmgr.exe\" -list"
于 2009-10-12T21:59:38.603 に答える
-1

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");
    ...
}
于 2009-10-12T21:52:33.453 に答える