void perror(const char *s);
#include <errno.h>
const char * const sys_errlist[];
int sys_nerr;
int errno; /* 実際にこのように宣言されているわけではない。 errno(3) 参照 */
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
sys_errlist, sys_nerr: _BSD_SOURCE
このメッセージを最大限活用するためには、引き数文字列にエラーが発生した 関数名を入れておくとよい。 エラー番号は外部変数 errno から取得される。 errno はエラーが発生した時に設定され、 成功した呼び出しではクリアされない。
大域変数のエラーリスト sys_errlist[] は errno を添字とする配列で、この 配列から改行無しのエラーメッセージが取得される。 テーブルでの最大のメッセージ 番号は sys_nerr -1 となる。 このテーブルを直接参照する際には注意すること。 なぜなら、新しいエラー番号が sys_errlist[] に追加済とは限らないからである。 現在では、sys_errlist[] の使用は非推奨となっている。
システムコールが失敗した場合、通常、返り値として -1 が返り、 errno にエラーを識別する値が設定される (設定されるエラー番号は <errno.h> に記載されている)。 多くのライブラリ関数も同様の動作となる。 関数 perror() は、このエラーコードの可読なメッセージへの変換を行う。 errno は、ライブラリ呼び出しが成功した後には未定義であることに注意が必要である: その呼び出し自身は成功したとしても、内部で呼び出した他のライブラリ関数が 失敗して、その結果をこの変数に設定することがあるからだ。 よって、失敗した呼び出しの直後に perror() を呼ばない場合には errno の値を 保存しておかなければならない。