(PECL eio >= 0.0.1dev)
eio_readdir — ディレクトリ全体を読み込む
ディレクトリ全体を (opendir
や readdir
、
closedir
といったシステムコールを使って) 読み込み、
ファイル名あるいは配列 (flags
で指定する) を
callback
関数の result
引数で返します。
path
ディレクトリのパス。
flags
EIO_READDIR_* 定数の組み合わせ。
pri
リクエストの優先順位。EIO_PRI_DEFAULT
、EIO_PRI_MIN
、EIO_PRI_MAX
あるいは null
を指定します。
null
を渡した場合、pri
は内部的に
EIO_PRI_DEFAULT
となります。
callback
callback
関数が、リクエスト終了時にコールされます。
この関数のプロトタイプは、
void callback(mixed $data, int $result[, resource $req]);
data
は、リクエストに渡すカスタムデータです。
result
にはリクエスト固有の結果が格納されます。基本的には、対応するシステムコールが返すそのままの値となります。
req
はオプションで指定するリクエストリソースです。 eio_get_last_error() のような関数で使えます。
data
callback
に渡す任意の引数。
eio_readdir()
は、成功した場合にリクエストリソースを返します。失敗した場合に false
を返します。
callback
関数の result
に設定される内容は flags
によって変わります。
EIO_READDIR_DENTS
(int)
'names'
- ディレクトリ名の配列/
'dents'
- struct eio_dirent
風の配列で、
それぞれがさらに以下のキーを持ちます (
'name'
- ディレクトリ名/
'type'
- EIO_DT_* 定数のいずれか/
'inode'
- inode 番号。存在しない場合は不定
)
EIO_READDIR_DIRS_FIRST
(int)
EIO_READDIR_STAT_ORDER
(int)
stat
するのに適した順となります。
指定したディレクトリにあるすべてのファイルを
stat() するつもりなら、この順にしておけば最速になります。
EIO_READDIR_FOUND_UNKNOWN
(int)
ノード型
EIO_DT_UNKNOWN
(int)
EIO_DT_FIFO
(int)
EIO_DT_CHR
(int)
EIO_DT_MPC
(int)
EIO_DT_DIR
(int)
EIO_DT_NAM
(int)
EIO_DT_BLK
(int)
EIO_DT_MPB
(int)
EIO_DT_REG
(int)
EIO_DT_NWK
(int)
EIO_DT_CMP
(int)
EIO_DT_LNK
(int)
EIO_DT_SOCK
(int)
EIO_DT_DOOR
(int)
EIO_DT_WHT
(int)
EIO_DT_MAX
(int)
例1 eio_readdir() の例
<?php
/* eio_readdir() が終わったら呼ばれます */
function my_readdir_callback($data, $result) {
echo __FUNCTION__, " called\n";
echo "data: "; var_dump($data);
echo "result: "; var_dump($result);
echo "\n";
}
eio_readdir("/var/spool/news", EIO_READDIR_STAT_ORDER | EIO_READDIR_DIRS_FIRST,
EIO_PRI_DEFAULT, "my_readdir_callback");
eio_event_loop();
?>
上の例の出力は、 たとえば以下のようになります。
my_readdir_callback called data: NULL result: array(2) { ["names"]=> array(7) { [0]=> string(7) "archive" [1]=> string(8) "articles" [2]=> string(8) "incoming" [3]=> string(7) "innfeed" [4]=> string(8) "outgoing" [5]=> string(8) "overview" [6]=> string(3) "tmp" } ["dents"]=> array(7) { [0]=> array(3) { ["name"]=> string(7) "archive" ["type"]=> int(4) ["inode"]=> int(393265) } [1]=> array(3) { ["name"]=> string(8) "articles" ["type"]=> int(4) ["inode"]=> int(393266) } [2]=> array(3) { ["name"]=> string(8) "incoming" ["type"]=> int(4) ["inode"]=> int(393267) } [3]=> array(3) { ["name"]=> string(7) "innfeed" ["type"]=> int(4) ["inode"]=> int(393269) } [4]=> array(3) { ["name"]=> string(8) "outgoing" ["type"]=> int(4) ["inode"]=> int(393270) } [5]=> array(3) { ["name"]=> string(8) "overview" ["type"]=> int(4) ["inode"]=> int(393271) } [6]=> array(3) { ["name"]=> string(3) "tmp" ["type"]=> int(4) ["inode"]=> int(393272) } } }