#include <string.h> char *strerror(int errnum); char *strerror_r(int errnum, char *buf, size_t buflen);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
次の場合には
XSI 準拠のバージョンの
strerror_r()
が提供される:
(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE
strerror_r() 関数は strerror() と似ているが、 スレッドセーフである。 この関数には二種類のバージョンが存在し、 POSIX.1-2001 で規定された XSI 準拠のバージョン (glibc 2.3.4 以降で利用可能) と、 GNU 仕様のバージョン (glibc 2.0 以降で利用可能) である。 「書式」の節に記載された機能検査マクロの場合には、 XSI 準拠のバージョンが提供される。 それ以外の場合には GNU 仕様のバージョンが提供される。 機能検査マクロが一つも明示的に定義されない場合、 (glibc 2.4 以降では) デフォルトで _POSIX_SOURCE は値 200112l で定義され、その結果 XSI 準拠のバージョンの strerror_r() がデフォルトで提供される。
移植性が必要なアプリケーションでは、 XSI 準拠の strerror_r() を使う方がよい。 この関数は、ユーザーから提供される長さ buflen のバッファ buf にエラー文字列を返す。
GNU 仕様の strerror_r() は、エラーメッセージを格納した文字列へのポインタを返す。 返り値は、この関数が buf に格納した文字列へのポインタか、 何らかの (不変な) 静的な文字列へのポインタ、のいずれかとなる (後者の場合は buf は使用されない)。 buf に文字列が格納される場合は、 最大で buflen バイトが格納され (buflen が小さ過ぎたときには文字列は切り詰められる)、 文字列には必ず終端ヌル文字が含まれる。
XSI 準拠の strerror_r() 関数は成功すると 0 を返す。 エラーの場合には、 -1 を返し、 errno にエラー内容を示す値をセットする。
GNU 仕様の strerror_r() 関数は非標準の拡張である。
POSIX.1-2001 は、 strerror() がエラーに遭遇した場合に errno をセットすることを認めているが、エラー発生時に関数の結果として どんな値を返すべきかを規定してない。 あるシステムでは、 エラー番号が未知の場合、 strerror() は NULL を返す。 他のシステムでは、 エラー番号が未知の場合、 strerror() は "Error nnn occurred" といった文字列を返し、 errno に EINVAL をセットする。