私はたくさんを含むプログラムを手に入れましたstd::cerr
、それは私の端末に直接出力します。std::cerr
との違いは何だろうと思いstd::cout
ます。そして、どうすれば無効にできますかstd::cerr
(画面に出力したくない)?
5 に答える
他の人が言及したように、これが Unix ライクなシステムである場合、2>/dev/null は stderr (2) を空の大きなビット バケット (/dev/null) にリダイレクトします。
しかし、ここでは誰も stderr と stdout の違いを説明していないので、少なくともこのトピックに触れる義務があると感じています。
std::cout は標準出力ストリームです。これは通常、プログラムがメッセージを出力する場所です。
std::cerr は標準エラーストリームです。これは通常、エラー メッセージに使用されます。
そのため、プログラムに「多数の cerr が含まれている」出力が含まれている場合は、単純にメッセージを非表示にするのではなく、非常に多くのエラー メッセージが出力されている理由を調べる価値があるかもしれません。もちろん、これは、何らかの理由で多くの非エラー出力を stderr に出力するプログラムをたまたま持っていないことを前提としています。
2> / dev/nullがトリックを行います。もう一度、30文字を構成する必要があります。
このプログラムが *nix システムで実行されると仮定すると、1 つの可能性は stderr を /dev/null にリダイレクトすることです。
この古いニュースグループの投稿は、リダイレクトする方法を示しています。(コードが大きすぎてここに投稿できません) . を使用する必要がありますstreambuf* rdbuf
。
cerr
ostream
標準エラーストリームを表すclass のオブジェクトです。cstdio ストリームに関連付けられていますstderr
。
デフォルトでは、ほとんどのシステムの標準エラー出力はコンソールに設定されており、テキスト メッセージが表示されますが、通常はリダイレクトできます。
cerr
は class のオブジェクトであるためostream
、たとえば挿入演算子 (ostream::operator<<) を使用して書式設定されたデータとして、または write メンバー関数を使用して書式設定されていないデータとして文字を書き込むことができます (ostream を参照)。
Windows や Unix を含む多くのシステムには、stdout と stderrの 2 つの標準出力ストリームがあります。
通常、プログラムは stdout に出力します。これは、画面に表示されるか、ファイルにリダイレクトされるかprogram > output.txt
、別のプログラムの入力としてリダイレクトされますprogram1 | program2
。たとえば、 をgrep
実行して、ツールを使用してプログラムの出力を検索できますprogram | grep searchword
。
ただし、エラーが発生し、リダイレクトされた stdout に出力した場合、ユーザーには表示されません。そのため、エラーの 2 番目の出力があります。また、ユーザーは通常、エラー テキストを出力ファイルに書き込んだり、grep に入力したりしたくありません。
プログラムの実行時に、エラー出力を .xml ファイルにリダイレクトできますprogram 2>file
。ファイルは /dev/null または&1
、stdout へのリダイレクトを意味する のいずれかです。