それらの違いは何ですか?また、どのように使用されますか?誰かが私に例を指摘できますか?
具体的には、どちらの場合もストリームにどのように「書き込む」のですか? また、書き込まれたテキストを復元して出力する (つまり、画面に出力する) 方法は?
また、「画面」出力自体がストリームですよね?多分私はストリームを十分に理解していません。もちろん、これはファイルに保存することもできます。これらはすべてfprintf
/fscanf
などを使用しますか?
それらの違いは何ですか?また、どのように使用されますか?誰かが私に例を指摘できますか?
具体的には、どちらの場合もストリームにどのように「書き込む」のですか? また、書き込まれたテキストを復元して出力する (つまり、画面に出力する) 方法は?
また、「画面」出力自体がストリームですよね?多分私はストリームを十分に理解していません。もちろん、これはファイルに保存することもできます。これらはすべて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++ ライブラリの一部です。
また、「画面」出力自体がストリームですよね?
はい、そうです。しかし実際には、デフォルトで画面に書き込む2 つのstdout
ストリームがあります。/cout
は通常の出力用で、stderr
/cerr
はエラー メッセージ用です。これはリダイレクトに役立ちstdout
ます。ファイルにリダイレクトできますが、エラー メッセージは画面に表示されたままです。