36

errno を使用してエラーの種類を示すシステム/ライブラリ呼び出しを使用するマルチスレッド アプリケーションを作成している場合、errno を安全に使用する方法はありますか? そうでない場合、エラーが発生したというだけでなく、発生したエラーの種類を示す別の方法はありますか?

4

2 に答える 2

36

標準ライブラリがマルチスレッドに対応している場合、おそらく、スレッド ローカル エラーの戻り値を返す関数呼び出しに#define変更される があります。errnoただし、これを使用するには、通常、宣言に依存するのではなく、を含める必要があります。<errno.h>extern

この問題に対処する記事Thread-safety and POSIX.1を見つけました。

于 2009-01-16T07:49:26.657 に答える
19

man errno言う:

errnoは、ISO C標準によって、int型の変更可能な左辺値として定義されており、明示的に宣言してはなりません。errnoはマクロである可能性があります。errnoはスレッドローカルです。1つのスレッドで設定しても、他のスレッドでの値には影響しません。

于 2009-01-16T08:54:40.253 に答える