STRERROR

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

strerror, strerrorname_np, strerrordesc_np, strerror_r, strerror_l - エラー番号を説明する文字列を返す。  

書式

#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():

次の場合には XSI 準拠のバージョンが提供される:
(_POSIX_C_SOURCE >= 200112L) && !  _GNU_SOURCE
それ以外の場合、GNU バージョンが提供される。
 

説明

strerror() 関数は、引数 errnum で渡されたエラーコードについての説明が入った文字列へのポインターを返す。 可能であるならば、適切な言語を選択するために、 現在のロケールの LC_MESSAGES を使う。(例えば、 errnum が EINVAL の場合、説明として "Invalid argument" が返される。) この文字列は、アプリケーションで変更してはならないが、 これ以降に行われる strerror() や strerror_l() の呼び出しで変更されても構わない。 perror(3) などの、これ以外のライブラリ関数ではこの文字列は変更されない。

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".  

strerror_r()

strerror_r() 関数は strerror() と似ているが、スレッドセーフである。この関数には二種類のバージョンが存在し、 POSIX.1-2001 で規定された XSI 準拠のバージョン (glibc 2.3.4 以降で利用可能だが、glibc 2.13 までは POSIX 準拠ではない) と、 GNU 仕様のバージョン (glibc 2.0 以降で利用可能) である。 「書式」の節に記載された機能検査マクロの場合には、 XSI 準拠のバージョンが提供される。それ以外の場合には GNU 仕様のバージョンが提供される。機能検査マクロが一つも明示的に定義されない場合、 (glibc 2.4 以降では) デフォルトで _POSIX_C_SOURCE は値 200112l で定義され、その結果 XSI 準拠のバージョンの strerror_r() がデフォルトで提供される。

移植性が必要なアプリケーションでは、 XSI 準拠の strerror_r() を使う方がよい。 この関数は、ユーザーから提供される長さ buflen のバッファー buf にエラー文字列を返す。

GNU 仕様の strerror_r() は、 エラーメッセージを格納した文字列へのポインターを返す。 返り値は、 この関数が buf に格納した文字列へのポインターか、 何らかの (不変な) 静的な文字列へのポインター、 のいずれかとなる (後者の場合は buf は使用されない)。 buf に文字列が格納される場合は、 最大で buflen バイトが格納される (buflen が小さ過ぎたときには文字列は切り詰められ、 errnum は不定である)。 文字列には必ず終端ヌル文字 ('\0') が含まれる。  

strerror_l()

strerror_l() は strerror() と同様だが、 errnum を locale で指定されたロケールのロケール依存のエラーメッセージにマッピングする。 locale が特別なロケールオブジェクト LC_GLOBAL_LOCALE の場合、もしくは locale が有効なロケールオブジェクトハンドルでない場合は、 strerror_l() の動作は未定義である。  

返り値

関数 strerror(), strerror_l() と GNU 固有の関数 strerror_r() はエラー内容を説明する文字列を返す。 エラー番号が未知の場合は "Unknown error nnn" という メッセージを返す。

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 をチェックすべき点に注意すること。  

エラー

EINVAL
errnum の値が有効なエラー番号ではない。
ERANGE
エラーコードを説明する文字列のために、充分な領域が確保できなかった。
 

バージョン

strerror_l() 関数は glibc 2.6 で初めて登場した。  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース 属性 値
strerror() Thread safety MT-Unsafe race:strerror
strerrorname_np(), strerrordesc_np() Thread safety MT-Safe
strerror_r(),
strerror_l()
Thread safety MT-Safe
 

準拠

strerror() は POSIX.1-2001, POSIX.1-2008, C89, C99 で規定されている。 strerror_r() は POSIX.1-2001 と POSIX.1-2008 で規定されている。

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 以外になることが求められている。  

注意

The GNU C Library uses a buffer of 1024 characters for strerror(). This buffer size therefore should be sufficient to avoid an ERANGE error when calling strerror_r().

strerrorname_np() and strerrordesc_np() are thread-safe and async-signal-safe.  

関連項目

err(3), errno(3), error(3), perror(3), strsignal(3), locale(7)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

関連キーワード

strerror   準拠   番号   提供   ロケール   規定   ポインター   argument   格納   size   検査   マクロ   アプリケーション   pointer   仕様   返り値   未知   Thread   safety   strerrorname   strerrordesc   locale   エラーコード   code   passed

Linux マニュアル 一覧

関連するコマンド・関数

strerror.3   strerror_l.3   strerrordesc_np.3   strerrorname_np.3   setlocale.3   uselocale.3
 

Index

名前
書式
説明
strerror_r()
strerror_l()
返り値
エラー
バージョン
属性
準拠
注意
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:03 GMT, October 11, 2026