Man page - readdir_r(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

READDIR_R

名 前
書 式
説 明
返 り 値
エ ラ ー
属 性
準 拠
関 連 項 目
こ の 文 書 に つ い て

名 前

readdir_r - デ ィ レ ク ト リ を 読 み 込 む

書 式

#include <dirent.h>

int readdir_r(DIR * dirp , struct dirent * entry , struct dirent ** result );

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 ( feature_test_macros (7) 参 照 ):

readdir_r ():

_POSIX_C_SOURCE
|| /* glibc 2.19 以 前 : */ _BSD_SOURCE || _SVID_SOURCE

説 明

こ の 関 数 は 非 推 奨 で あ る 。 代 わ り に readdir (3) を 使 用 す る こ と 。

readdir_r () 関 数 は readdir (3) の リ エ ン ト ラ ン ト 版 と し て 導 入 さ れ た 。 こ の 関 数 は デ ィ レ ク ト リ ス ト リ ー ム dirp か ら 次 の デ ィ レ ク ト リ エ ン ト リ ー を 読 み 込 み 、 entry が 指 す 呼 び 出 し 元 が 割 り 当 て た バ ッ フ ァ ー に そ の エ ン ト リ ー を 格 納 し て 返 す 。 dirent 構 造 体 の 詳 細 は readdir (3) を 参 照 。

結 果 を 返 す バ ッ フ ァ へ の ポ イ ン タ ー が *result に 格 納 さ れ る 。 デ ィ レ ク ト リ ス ト リ ー ム の 末 尾 に 達 し た 場 合 は 、 NULL が 代 わ り に *result で 返 さ れ る 。

ア プ リ ケ ー シ ョ ン で は readdir_r () の 代 わ り に readdir (3) を 使 用 す る こ と を 推 奨 す る 。 さ ら に 、 glibc 2.24 以 降 で は readdir_r () は 非 推 奨 と な っ て い る 。 理 由 は 以 下 の 通 り で あ る 。

*

NAME_MAX が 未 定 義 の シ ス テ ム で は 、 readdir_r () の 呼 び 出 し は 安 全 で は な い 。 こ の イ ン タ ー フ ェ ー ス で は 、 呼 び 出 し 元 が デ ィ レ ク ト リ エ ン ト リ ー を 返 す 際 に 使 用 さ れ る バ ッ フ ァ の 長 さ を 指 定 す る こ と が で き な い か ら で あ る 。

*

い く つ か の シ ス テ ム で は 、 readdir_r () は 非 常 に 長 い 名 前 の デ ィ レ ク ト リ エ ン ト リ ー を 読 み 込 む こ と が で き な い 。 glibc の 実 装 で は こ の よ う な 名 前 に 遭 遇 し た 場 合 、 readdir_r () は 最 後 の デ ィ レ ク ト リ エ ン ト リ ー を 読 み 込 ん だ 後 エ ラ ー ENAMETOOLONG で 失 敗 す る 。 他 の い く つ か の シ ス テ ム で は 、 readdir_r () が 成 功 ス テ ー タ ス を 返 し て も 、 返 さ れ た d_name フ ィ ー ル ド が ヌ ル 終 端 さ れ て い な か っ た り 、 文 字 列 が 途 中 ま で で 切 り 詰 め ら れ て い た り す る こ と が あ る 。

*

現 在 の POSIX.1 標 準 (POSIX.1-2008) で は 、 readdir (3) が ス レ ッ ド セ ー フ で あ る こ と は 求 め ら れ て い な い 。 し か し な が ら 、 最 近 の 実 装 (glibc に よ る 実 装 も 含 む ) で は 、 異 な る デ ィ レ ク ト リ ス ト リ ー ム に 対 す る readdir (3) の 同 時 並 行 の 呼 び 出 し は ス レ ッ ド セ ー フ で あ る 。 し た が っ て 、 マ ル チ ス レ ッ ド プ ロ グ ラ ム に お い て readdir_r () の 使 用 は 不 要 で あ る 。 複 数 の ス レ ッ ド が 同 じ デ ィ レ ク ト リ ス ト リ ー ム か ら 読 み 込 み を 行 う 必 要 が あ る 場 合 も 、 上 記 で 挙 げ た 理 由 か ら 、 非 推 奨 の readdir_r () 関 数 を 使 用 す る よ り も 、 外 部 同 期 を 用 い た readdir (3) を 使 う 方 が 推 奨 さ れ る 。

*

POSIX.1 の 将 来 の バ ー ジ ョ ン で は 、 readdir_r () は 廃 止 予 定 (obsolete) と な り 、 readdir (3) は 異 な る デ ィ レ ク ト リ ス ト リ ー ム に 対 し て 同 時 に 使 用 さ れ た 際 に ス レ ッ ド セ ー フ で あ る こ と が 必 須 と な る 予 定 で あ る 。

返 り 値

成 功 す る と 、 readdir_r () 関 数 は 0 を 返 す 。 エ ラ ー の 場 合 、 (「 エ ラ ー 」 の 節 の リ ス ト に 載 っ て い る ) 正 の エ ラ ー 番 号 を 返 す 。 デ ィ レ ク ト リ ス ト リ ー ム の 末 尾 に 達 し た 場 合 、 readdir_r () は 返 り 値 と し て 0 を 返 し 、 *result に NULL を 格 納 す る 。

エ ラ ー

EBADF

デ ィ レ ク ト リ ス ト リ ー ム デ ィ ス ク リ プ タ ー dirp が 無 効 で あ る 。

ENAMETOOLONG

読 み 込 む に は 名 前 が 長 過 ぎ る デ ィ レ ク ト リ エ ン ト リ ー に 遭 遇 し た 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-29962-1.png

準 拠

POSIX.1-2001, POSIX.1-2008.

関 連 項 目

readdir (3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。