名 前
perror − シ ス テ ム エ ラ ー メ ッ セ ー ジ を 出 力 す る
書 式
#include <stdio.h>
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
説 明
関 数 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> に 含 ま れ て い る 。
関 連 項 目
err(3), errno(3), error(3), strerror(3)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。