それらの違いは何ですか、どのように使用されますか?誰かが例を教えてくれますか?
具体的には、両方のケースでどのようにストリームに「書き込む」のか、また、書き込まれたテキストをどのように回復して出力する(つまり、画面に出力する)のですか?
また、「画面」出力自体がストリームですよね?ストリームを十分に理解していないのかもしれません。もちろん、これはファイルに保存することもできます。これらはすべてfprintf
/fscanf
などを使用しますか?
cerr
はC++ストリーム、stderr
はCファイルハンドルです。どちらも標準エラー出力を表します。
他のストリームやファイルハンドルに書き込むのと同じ方法でそれらに書き込みます。
cerr << "Urk!\n";
fprintf (stderr, "Urk!\n");
このコンテキストでの「回復」の意味がわかりません。出力は標準エラーになり、それだけです。プログラムはその後、それを気にするつもりはありません。プログラムの外部から後で保存する方法を意味する場合は、次の段落を参照してください。
デフォルトでは、それらは端末に行きますが、出力は次のようなもので他の場所にリダイレクトできます:
run_my_prog 2>error.out
そして、はい、「画面」出力はストリーム(またはファイルハンドル)ですが、それは通常、デフォルトでstdout/cout
とstderr/cerr
が「画面」に接続されているためです。画面に何も書き込まれない次の場合のように、リダイレクトはこれに影響します。
run_my_prog >/dev/null 2>&1
(それにもかかわらず、/dev/tty
に直接書き込むような厄介なこと)。このスニペットは、標準出力と標準エラーの両方をリダイレクトして、ビットバケットに移動します。
それらの違いは何ですか
stderr
はFILE*
、および標準Cライブラリの一部。 cerr
はostream
であり、標準C++ライブラリの一部です。
また、「画面」出力自体がストリームですよね?
はい、そうです。しかし、実際には、デフォルトで画面に書き込むtwoストリームがあります:stdout
/cout
は通常の出力用で、stderr
/cerr
はエラーメッセージ用です。これはリダイレクトに便利です。stdout
をファイルにリダイレクトできますが、画面にはエラーメッセージが表示されます。