プログラムで実行されるシステムコマンドの標準エラー出力をブロックする

StackOverflow https://stackoverflow.com/questions/451595

質問

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でexecvpman 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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top