Manpages

名 前

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 を 使 う 。 (例 え ば 、 errnumEINVAL の 場 合 、 説 明 と し て "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() と 同 様 だ が 、 errnumlocale で 指 定 さ れ た ロ ケ ー ル の ロ ケ ー ル 依 存 の エ ラ ー メ ッ セ ー ジ に マ ッ ピ ン グ す る 。 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" と い っ た 文 字 列 を 返 し 、 errnoEINVAL を セ ッ ト す る 。 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/ に 書 か れ て い る 。