perror - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
perror - システムエラーメッセージを出力する
書式
#include <stdio.h>
void perror(const char
*s
);
#include <errno.h>
const char *
sys_errlist
[];
int
sys_nerr
;
int
errno
;
説明
関数
perror
()は、システムコールやライブラリ関数の呼び出しにおいて、最後に発生した
エラーに関する説明メッセージを生成し、標準エラー出力に出力する。
(
s
が NULL でなく、
*
s
が NULL バイト ('\0') でない場合には) 引き数の文字列
s
がまず出力され、続いてコロン、空白が出力され、
それからメッセージと改行が出力される。
このメッセージを最大限活用するためには、引き数文字列にエラーが発生した
関数名を入れておくとよい。
エラー番号は外部変数
errno
から取得される。
errno
はエラーが発生した時に設定され、エラーが発生しない呼び出しでは
クリアされない。
大域変数のエラーリスト
sys_errlist
[]は
errno
を添字とする配列で、この配列から改行無しのエラーメッセージが取得される。
テーブルでの最大のメッセージ番号は
sys_nerr
-1となる。
このテーブルを直接参照する際には注意すること。なぜなら、新しいエラー番号が
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> に含まれている。
関連項目
err
(3),
errno
(3),
error
(3),
strerror
(3)