名 前
strerror, strerror_r, strerror_l − エ ラ ー 番 号 を 説 明 す る 文 字 列 を 返 す 。
書 式
#include <string.h>
char *strerror(int errnum);
int
strerror_r(int errnum, char
*buf, size_t buflen);
/* XSI−compliant */
char
*strerror_r(int errnum, char
*buf, size_t buflen);
/* GNU−specific */
char *strerror_l(int errnum, locale_t locale);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
strerror_r(): 次 の 場 合 に は XSI 準 拠 の バ ー ジ ョ ン が 提 供 さ れ る :
(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE そ れ 以 外 の 場 合 、 GNU バ ー ジ ョ ン が 提 供 さ れ る 。
説 明
strerror() 関 数 は 、 引 き 数 errnum で 渡 さ れ た エ ラ ー コ ー ド に つ い て の 説 明 が 入 っ た 文 字 列 へ の ポ イ ン タ ー を 返 す 。 可 能 で あ る な ら ば 、 適 切 な 言 語 を 選 択 す る た め に 、 現 在 の ロ ケ ー ル の LC_MESSAGES を 使 う 。 (例 え ば 、 errnum が EINVAL の 場 合 、 説 明 と し て "Invalid argument" が 返 さ れ る 。 ) こ の 文 字 列 は 、 ア プ リ ケ ー シ ョ ン で 変 更 し て は な ら な い が 、 こ れ 以 降 に 行 わ れ る strerror() や strerror_l() の 呼 び 出 し で 変 更 さ れ て も 構 わ な い 。 perror(3) な ど の 、 こ れ 以 外 の ラ イ ブ ラ リ 関 数 で は こ の 文 字 列 は 変 更 さ れ な い 。
strerror_r()
strerror_r() 関 数 は
strerror() と 似 て い
る が 、 ス レ ッ
ド セ ー フ で あ
る 。 こ の 関 数
に は 二 種 類 の
バ ー ジ ョ ン が
存 在 し 、 POSIX.1−2001
で 規 定 さ れ た XSI
準 拠 の バ ー ジ
ョ ン (glibc 2.3.4 以 降 で
利 用 可 能 だ が
、 glibc 2.13 ま で は POSIX
準 拠 で は な い )
と 、 GNU 仕 様 の バ
ー ジ ョ ン (glibc 2.0 以
降 で 利 用 可 能 )
で あ る 。 「 書
式 」 の 節 に 記
載 さ れ た 機 能
検 査 マ ク ロ の
場 合 に は 、 XSI 準
拠 の バ ー ジ ョ
ン が 提 供 さ れ
る 。 そ れ 以 外
の 場 合 に は GNU 仕
様 の バ ー ジ ョ
ン が 提 供 さ れ
る 。 機 能 検 査
マ ク ロ が 一 つ
も 明 示 的 に 定
義 さ れ な い 場
合 、 (glibc 2.4 以 降 で
は ) デ フ ォ ル ト
で _POSIX_SOURCE は 値 200112l
で 定 義 さ れ 、
そ の 結 果 XSI 準 拠
の バ ー ジ ョ ン
の strerror_r() が デ フ
ォ ル ト で 提 供
さ れ る 。 移 植
性 が 必 要 な ア
プ リ ケ ー シ ョ
ン で は 、 XSI 準 拠
の strerror_r() を 使 う
方 が よ い 。 こ
の 関 数 は 、 ユ
ー ザ ー か ら 提
供 さ れ る 長 さ
buflen の バ ッ フ ァ
ー buf に エ ラ ー
文 字 列 を 返 す
。
GNU 仕 様 の strerror_r() は 、 エ ラ ー メ ッ セ ー ジ を 格 納 し た 文 字 列 へ の ポ イ ン タ ー を 返 す 。 返 り 値 は 、 こ の 関 数 が buf に 格 納 し た 文 字 列 へ の ポ イ ン タ ー か 、 何 ら か の (不 変 な ) 静 的 な 文 字 列 へ の ポ イ ン タ ー 、 の い ず れ か と な る (後 者 の 場 合 は buf は 使 用 さ れ な い )。 buf に 文 字 列 が 格 納 さ れ る 場 合 は 、 最 大 で buflen バ イ ト が 格 納 さ れ る (buflen が 小 さ 過 ぎ た と き に は 文 字 列 は 切 り 詰 め ら れ 、 errnum は 不 定 で あ る )。 文 字 列 に は 必 ず 終 端 ヌ ル 文 字 ('\0') が 含 ま れ る 。
strerror_l()
strerror_l() は strerror() と
同 様 だ が 、 errnum
を locale で 指 定 さ
れ た ロ ケ ー ル
の ロ ケ ー ル 依
存 の エ ラ ー メ
ッ セ ー ジ に マ
ッ ピ ン グ す る
。 locale が 特 別 な
ロ ケ ー ル オ ブ
ジ ェ ク ト LC_GLOBAL_LOCALE
の 場 合 、 も し
く は locale が 有 効
な ロ ケ ー ル オ
ブ ジ ェ ク ト ハ
ン ド ル で な い
場 合 は 、 strerror_l()
の 動 作 は 未 定
義 で あ る 。
返 り 値
関 数 strerror(), strerror_l() と GNU 固 有 の 関 数 strerror_r() は エ ラ ー 内 容 を 説 明 す る 文 字 列 を 返 す 。 エ ラ ー 番 号 が 未 知 の 場 合 は "Unknown error nnn" と い う メ ッ セ ー ジ を 返 す 。
XSI 準 拠 の strerror_r() 関 数 は 成 功 す る と 0 を 返 す 。 エ ラ ー の 場 合 に は 、 (glibc 2.13 以 降 で は ) (正 の ) エ ラ ー 番 号 が 返 さ れ 、 (バ ー ジ ョ ン 2.13 よ り 前 の glibc で は ) −1 が 返 さ れ 、 errno に エ ラ ー を 示 す 値 が セ ッ ト さ れ る 。
POSIX.1−2001 と POSIX.1−2008 で は 、 strerror() や strerror_l() が 成 功 し た 場 合 は errno を 変 更 せ ず に 元 の ま ま に し な け れ ば な ら な い と さ れ て い る 。 関 数 の ど の 返 り 値 も エ ラ ー を 示 す た め に 予 約 さ れ て い な い の で 、 エ ラ ー を チ ェ ッ ク し た い ア プ リ ケ ー シ ョ ン は 呼 び 出 し を 行 う 前 に errno を 0 に 初 期 化 し 、 呼 び 出 し の 後 で errno を チ ェ ッ ク す べ き 点 に 注 意 す る こ と 。
エ ラ ー
EINVAL |
errnum の 値 が 有 効 な エ ラ ー 番 号 で は な い 。 |
|||
ERANGE |
エ ラ ー コ ー ド を 説 明 す る 文 字 列 の た め に 、 充 分 な 領 域 が 確 保 で き な か っ た 。
属 性マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) |
strerror() 関 数 は ス レ ッ ド セ ー フ で は な い 。
strerror_r() 関 数 は ス レ ッ ド セ ー フ で あ る 。
バ ー ジ ョ ン
strerror_l() 関 数 は glibc 2.6 で 初 め て 登 場 し た 。
準 拠
strerror() は POSIX.1−2001, POSIX.1−2008, C89, C99 で 規 定 さ れ て い る 。 strerror_r() は POSIX.1−2001 と POSIX.1−2008 で 規 定 さ れ て い る 。
strerror_l() は POSIX.1−2008 で 規 定 さ れ て い る 。
GNU 仕 様 の strerror_r() 関 数 は 非 標 準 の 拡 張 で あ る 。
POSIX.1−2001 は 、 strerror() が エ ラ ー に 遭 遇 し た 場 合 に errno を セ ッ ト す る こ と を 認 め て い る が 、 エ ラ ー 発 生 時 に 関 数 の 結 果 と し て ど ん な 値 を 返 す べ き か を 規 定 し て な い 。 あ る シ ス テ ム で は 、 エ ラ ー 番 号 が 未 知 の 場 合 、 strerror() は NULL を 返 す 。 他 の シ ス テ ム で は 、 エ ラ ー 番 号 が 未 知 の 場 合 、 strerror() は "Error nnn occurred" と い っ た 文 字 列 を 返 し 、 errno に EINVAL を セ ッ ト す る 。 C99 と POSIX.1−2008 で は 、 返 り 値 が NULL 以 外 に な る こ と が 求 め ら れ て い る 。
関 連 項 目
err(3), errno(3), error(3), perror(3), strsignal(3), locale(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。