書式
#include <stdio.h>void perror(const char *s);
#include <errno.h>
const char *sys_errlist[];
int sys_nerr;
int errno;
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
sys_errlist, sys_nerr: _BSD_SOURCE
説明
関数 perror() は、システムコールやライブラリ関数の呼び出しにおいて、最後に発生した エラーに関する説明メッセージを生成し、標準エラー出力に出力する。 (s が NULL でなく、 *s がヌルバイト ('\0') でない場合には) 引き数の文字列 s がまず出力され、続いてコロン、空白が出力され、 それからメッセージと改行が出力される。このメッセージを最大限活用するためには、引き数文字列にエラーが発生した 関数名を入れておくとよい。 エラー番号は外部変数 errno から取得される。 errno はエラーが発生した時に設定され、 成功した呼び出しではクリアされない。
大域変数のエラーリスト sys_errlist[] は errno を添字とする配列で、この 配列から改行無しのエラーメッセージが取得される。 テーブルでの最大のメッセージ 番号は sys_nerr -1 となる。 このテーブルを直接参照する際には注意すること。 なぜなら、新しいエラー番号が sys_errlist[] に追加済とは限らないからである。 現在では、sys_errlist[] の使用は非推奨となっている。
システムコールが失敗した場合、通常、返り値として -1 が返り、 errno にエラーを識別する値が設定される (設定されるエラー番号は <errno.h> に記載されている)。 多くのライブラリ関数も同様の動作となる。 関数 perror() は、このエラーコードの可読なメッセージへの変換を行う。 errno は、ライブラリ呼び出しが成功した後には未定義であることに注意が必要である: その呼び出し自身は成功したとしても、内部で呼び出した他のライブラリ関数が 失敗して、その結果をこの変数に設定することがあるからだ。 よって、失敗した呼び出しの直後に perror() を呼ばない場合には errno の値を 保存しておかなければならない。
準拠
関数 perror() と外部変数 errno (errno(3) 参照) は C89, 4.3BSD, POSIX.1-2001 に準拠している。 外部変数 sys_nerr と sys_errlist は BSD に準拠している。注意
外部変数 sys_nerr と sys_errlist は glibc で定義されているが、 <stdio.h> に含まれている。この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。