strerror

Autres langues

Langue: ja

Version: 2005-12-13 (mandriva - 01/05/08)

Section: 3 (Bibliothèques de fonctions)

名前

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

書式

 #include <string.h>
 
 char *strerror(int errnum);
 
 char *strerror_r(int errnum, char *buf, size_t buflen);
                         /* GNU 仕様の strerror_r() */
 
 #define _XOPEN_SOURCE 600
 #include <string.h>
 
 int strerror_r(int errnum, char *buf, size_t buflen);
                         /* XSI 準拠の strerror_r() */
 

説明

strerror() 関数は、引き数 errnum の中で引き渡される エラーコードを説明する文字列を返す。 可能であるならば、適切な言語を選択するために、 現在のロケールの LC_MESSAGES を使う。 この文字列は、アプリケーションで変更してはならないが、 その後に起こる perror(3) や strerror() の呼び出しで 変更されても構わない。 この文字列を変更するライブラリ関数はない。

strerror_r() 関数は strerror() と似ているが、 スレッドセーフである。 この関数には二種類のバージョンが存在し、 POSIX.1-2001 で規定された XSI 準拠のバージョンと、 GNU 仕様のバージョン (glibc 2.0 以降で利用可能) である。 _XOPEN_SOURCE が 600 に定義されると XSI 準拠のバージョンが提供され、 それ以外の場合には GNU 仕様のバージョンが提供される。

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

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

返り値

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

XSI 準拠の strerror_r() 関数は成功すると 0 を返す。 エラーの場合には、 -1 を返し、 errno にエラー内容を示す値をセットする。

エラー

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

準拠

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

GNU 仕様の strerror_r() 関数は非標準の拡張である。

POSIX.1-2001 は、 strerror() がエラーに遭遇した場合に errno をセットすることを認めているが、エラー発生時に関数の結果として どんな値を返すべきかを規定してない。 あるシステムでは、 エラー番号が未知の場合、 strerror() は NULL を返す。 他のシステムでは、 エラー番号が未知の場合、 strerror() は "Error nnn occurred" といった文字列を返し、 errnoEINVAL をセットする。

関連項目

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