STRERROR(3) | FreeBSD Library Functions Manual | STRERROR(3) |
名称
perror, strerror, strerror_r, sys_errlist, sys_nerr — システムのエラーメッセージライブラリ
Standard C Library (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 が NULL でなく、ヌル文字を指さない場合は、この文字列は、メッセージ文字列の前にコロンとスペース (“ :
”) で区切って追加されます。それ以外の場合は、エラーメッセージ文字列のみが印字されます。
エラー番号が認識されないなら、これらの関数は、“ Unknown error:
”を含むエラーメッセージ文字列に続いて 10 進数のエラー番号を返します。 strerror() と strerror_r() 関数は、警告として EINVAL を返します。エラー番号は、範囲 0 <= errnum < sys_nerr 内の実装で認識できます。また、番号 0 は、認識されますが、たぶん、これを利用するアプリケーションが、 errno の指定されない値を使用するためです。
エラー文字列を含めるたの ( buflen で指定されたように) strerrbuf が不十分な記憶領域で提供されたなら、 strerror_r() は、 ERANGE を返し、 strerrbuf には、 buflen で指定された長さに合わせて ヌル文字 で終了する切り捨てたエラーメッセージが入ります。
メッセージ文字列には、外部配列 sys_errlist を使って直接アクセスできます。外部値 sys_nerr には、 sys_errlist の中にあるメッセージのカウントが入っています。これらの変数を使用することには賛成できません。代わりに、 strerror() または strerror_r() を使った方がよいでしょう。
規格
perror() と strerror() 関数は、 ISO/IEC 9899:1999 (“ISO C99”) に適合しています。 strerror_r() 関数は、 IEEE Std 1003.1-2001 (“POSIX.1”) に適合しています。歴史
strerror() と perror() 関数は、 4.4BSD ではじめて登場しました。 strerror_r() 関数は、 <wes@FreeBSD.org>によって FreeBSD 4.4 で実装されました。バグ
strerror() 関数は、続く呼び出しによって上書きされる静的なバッファ中の結果を返します。strerror() のための返りタイプは、タイプ修飾子が不足しています。それは、実際は、 const char * であるべきです。
(将来のサポートの保証がない) 推奨されない sys_errlist 変数を使用しているプログラムは、矛盾した宣言のためにしばしばコンパイルに失敗します。
April 5, 2011 | FreeBSD |