プログラムで実行されるシステムコマンドの標準エラー出力をブロックする
-
19-08-2019 - |
質問
C ++でこのプログラムを使用しています:
#include <iostream>
using namespace std;
int main()
{
char buf[50];
cin.getline(buf,49);
system(buf);
return 0;
}
実行してコンパイルし、たとえば<!> quot; helo <!> quot;と入力すると、プログラムはエラーを出力します:
"helo" not found.
このエラーの表示を停止できますか?システムコマンドからエラーを無効にする方法はありますか?
解決
system
エラーの表示方法は変更できません。 CとC ++は、その点について実装にほとんど要件を課していないため、その大部分を指定しないままにして、可能な限り柔軟にすることができます。
より正確な制御が必要な場合は、ランタイムライブラリまたはオペレーティングシステムインターフェイスの機能を使用する必要があります。 linux / unixでexecvp
(man execvp
を参照)またはWindowsシステム用のCreateProcess関数を試してみてください。これは、エラー処理などを細かく制御できるWindows APIを使用します。
他のヒント
Linuxを使用していますか? <!> quot; ./ hello <!> quot;
と入力してみてくださいこれが機能する場合、理由は現在のディレクトリ(<!> quot;。<!> quot;)が検索パスにないことです。コンパイルされたプログラムが<!> quot; there <!> quot;であることを示す必要があります。ディレクトリ内。
代わりに、次のようなことができます
export PATH = $ PATH:。
これにより、<!> quot;。<!> quot;が追加されます。 (現在のディレクトリ)から検索パスへ。
Windowsを使用している場合は、<!> quot; hello.exe <!> quot;
を試してください Linuxを使用している場合、エラー出力をnull
デバイスにリダイレクトできますか?
strcat(buf, "2> /dev/null");
system(buf);