STRERROR(3)

名称
perror, strerror, sys_errlist, sys_nerr - システムのエラーメッセージ

ライブラリ
libc

書式
#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)

解説
strerror() および perror() 関数は、エラー番号に対応するエラーメッセージ文字列を探し出します。

strerror() 関数は、エラー番号の引数 errnum を受け取って、それに対応するメッセージ文字列へのポインタを返します。

perror() 関数は、大域変数 errno (intro(2)) の現在の値に対応するエラーメッセージを探して、 それに改行をつけて標準エラーファイル記述子に書込みます。引数 string が非ヌルであり、ヌル文字を指さない場合は、 この文字列はメッセージ文字列の前にコロンとスペース (‘: ’); で区切って追加されます。 それ以外の場合は、エラーメッセージ文字列のみが印字されます。

errnum がエラー番号として認識できない場合は、 エラーメッセージ文字列は “Unknown error: ” の後に 10 進数のエラー番号が続いたものとなります。

メッセージ文字列には、外部配列 sys_errlist を使って直接アクセスすることができます。外部値 sys_nerr には sys_errlist の中にあるメッセージのカウントが入っています。 これらの変数を使用することには賛成できません。代わりに、 strerror() を使った方がよいでしょう。

参照
intro(2), psignal(3)

歴史
strerror() および perror() 関数は、 4.4BSD ではじめて登場しました。

バグ
認識できないエラー番号に対しては、 strerror() 関数はその結果を静的バッファに返し、 それは以降の呼び出しによって上書きされる可能性があります。

sys_errlist 変数を使用している好ましくないプログラムは、 その変数を一貫性なく宣言するために失敗することがしばしばあります。