1. ホーム
  2. c

[解決済み] perror("...")とfprintf(stderr, "...")はいつ使えばいいのでしょうか?

2022-08-20 20:14:44

質問

マニュアルページといくつかのコードを読んでも、- と - の違いを理解するのに役立ちませんでした。 との違いを理解することはできませんでした。 perror("...") または fprintf(stderr, "...") .

どのように解決するのですか?

呼び出し perror を呼び出すと、解釈された値である errno これは POSIX システムコールによって書き込まれるスレッドローカルのエラー値です (つまり、すべてのスレッドがそれぞれ errno ). 例えば、もしあなたが open() を呼び出したら、エラーが発生した (すなわち、それは -1 を返す) 場合は perror を呼び出し、実際のエラーが何であったかを確認することができます。 もし、その間に他のシステムコールを呼び出すと、その値は errno の値は書き直され perror を呼び出しても、以前のシステムコールでエラーが発生した場合は、問題の診断には全く役に立ちません。

fprintf(stderr, ...) は、独自のエラーメッセージを表示するために使用することができます。 に印刷することで stderr に出力することで、エラー報告出力が stdout .

覚えておいてほしいのは fprintf(stderr, "%s\n", strerror(errno))perror(NULL) の呼び出しは strerror(errno) の呼び出しは、印刷された文字列の値を生成します。 errno に印刷される文字列を生成し、それを他のカスタムエラーメッセージと一緒に fprintf .