STRERROR(3) FreeBSD ライブラリ関数マニュアル STRERROR(3)
名称
perror, strerror, strerror_r, sys_errlist, sys_nerr − システムのエラー メッセージ |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <stdio.h> void |
perror(const char *string); extern const char * const sys_errlist[]; |
extern const int sys_nerr; #include <string.h> char * |
strerror(int errnum); int |
strerror_r(int errnum, char * strerrbuf, size_t buflen); |
解説 |
strerror(), strerror_r() および perror() 関数は、エラー番号に対応するエ ラーメッセージ文字列を探し出します。 strerror() 関数は、エラー番号の引数 errnum を受け取って、それに対応する メッセージ文字列へのポインタを返します。 strerror_r() 関数は、同じ結果を最大 buflen 文字数の strerrbuf に直し、成 功した場合は 0 を返します。 perror() 関数は、大域変数 errno (intro(2)) の現在の値に対応するエラーメッ セージを探して、それに改行をつけて標準エラーファイル記述子に書込みます。 引数 string が ヌル以外であり、ヌル文字を指さない場合は、この文字列はメッ セージ文字列の前にコロンとスペース (‘: ’); で区切って追加されます。それ以 外の場合は、エラーメッセージ文字列のみが印字されます。 errnum がエラー番号として認識できない場合は、 strerror() は、 ‘‘Unknown error: ’’ のエラーメッセージ文字列の後に、 10 進数のエラー番号を返し、 errno に EINVAL をセットします。 strerror_r() は、 strerrbuf を変更せずに EINVAL を返します。エラー番号が 0 <= errnum < sys_nerr 内の実装では、認識 できません。 エラー文字列を含む ( buflen で指定されているより) strerrbuf が不十分な領 域の場合、 strerror_r() は ERANGE を返し、 strerrbuf には、 buflen で指定 されたヌル文字で終了する長さの切り捨てたエラーメッセージが入ります。 メッセージ文字列には、外部配列 sys_errlist を使って直接アクセスすることが できます。外部値 sys_nerr には sys_errlist の中にあるメッセージのカウント が入っています。これらの変数を使用することには賛成できません。代わりに、 strerror() または strerror_r() を使った方がよいでしょう。 |
関連項目
歴史
strerror() および perror() 関数は、 4.4BSD ではじめて登場しました。 strerror_r() 関数は、 Wes Peters 〈wes@freebsd.org〉. によって FreeBSD 4.4 で実装されました。 |
バグ
認識できないエラー番号に対しては、 strerror() 関数はその結果を静的バッ ファに返し、それは以降の呼び出しによって上書きされる可能性があります。 sys_errlist 変数を使用している好ましくないプログラムは、その変数を一貫性 なく宣言するために失敗することがしばしばあります。 FreeBSD 10.0 Nov 26, 2001 FreeBSD 10.0 |