#include <string.h> char *strerror(int errnum); const char *strerrorname_np(int errnum); const char *strerrordesc_np(int errnum); int strerror_r(int errnum, char *buf, size_t buflen); /* XSI-compliant */ char *strerror_r(int errnum, char *buf, size_t buflen); /* GNU-specific */ char *strerror_l(int errnum, locale_t locale);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
strerrorname_np(),
strerrordesc_np():
_GNU_SOURCE
strerror_r():
Like strerror(), the strerrordesc_np() function returns a pointer to a string that describes the error code passed in the argument errnum, with the difference that the returned string is not translated according to the current locale.
The strerrorname_np() function returns a pointer to a string containing the name of the error code passed in the argument errnum. For example, given EPERM as an argument, this function returns a pointer to the string "EPERM".
移植性が必要なアプリケーションでは、 XSI 準拠の strerror_r() を使う方がよい。 この関数は、ユーザーから提供される長さ buflen のバッファー buf にエラー文字列を返す。
GNU 仕様の strerror_r() は、 エラーメッセージを格納した文字列へのポインターを返す。 返り値は、 この関数が buf に格納した文字列へのポインターか、 何らかの (不変な) 静的な文字列へのポインター、 のいずれかとなる (後者の場合は buf は使用されない)。 buf に文字列が格納される場合は、 最大で buflen バイトが格納される (buflen が小さ過ぎたときには文字列は切り詰められ、 errnum は不定である)。 文字列には必ず終端ヌル文字 ('\0') が含まれる。
On success, strerrorname_np() and strerrordesc_np() return the appropriate error description string. If errnum is an invalid error number, these functions return NULL.
XSI 準拠の strerror_r() 関数は成功すると 0 を返す。エラーの場合には、 (glibc 2.13 以降では) (正の) エラー番号が返され、(バージョン 2.13 より前 の glibc では) -1 が返され、 errno にエラーを示す値がセットされる。
POSIX.1-2001 と POSIX.1-2008 では、 strerror() や strerror_l() が成功した場合は errno を変更せずに元のままにしなければならないとされている。関数のどの返り値もエラーを示すために予約されていないので、エラーをチェックしたいアプリケーションは呼び出しを行う前に errno を 0 に初期化し、呼び出しの後で errno をチェックすべき点に注意すること。
インターフェース | 属性 | 値 |
strerror() | Thread safety | MT-Unsafe race:strerror |
strerrorname_np(), strerrordesc_np() | Thread safety | MT-Safe |
strerror_r(),
strerror_l() | Thread safety | MT-Safe |
strerror_l() は POSIX.1-2008 で規定されている。
GNU 固有の関数 strerror_r(), strerrorname_np(), strerrordesc_np() は、非標準の拡張である。
POSIX.1-2001 は、 strerror() がエラーに遭遇した場合に errno をセッ トすることを認めているが、エラー発生時に関数の結果として どんな値を返す べきかを規定してない。 あるシステムでは、 エラー番号が未知の場合、 strerror() は NULL を返す。 他のシステムでは、 エラー番号が未知の場 合、 strerror() は "Error nnn occurred" といった文字列を返し、 errno に EINVAL をセットする。 C99 と POSIX.1-2008 では、返り値が NULL 以外になることが求められている。
strerrorname_np() and strerrordesc_np() are thread-safe and async-signal-safe.