(PECL eio >= 0.0.1dev)
eio_readdir — ディレクトリ全体を読み込む
ディレクトリ全体を (opendir や readdir、
closedir といったシステムコールを使って) 読み込み、
ファイル名あるいは配列 (flags で指定する) を
callback 関数の result 引数で返します。
pathディレクトリのパス。
flagsEIO_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)
}
}
}