eio_readdir
(PECL eio >= 0.0.1dev)
eio_readdir — ディレクトリ全体を読み込む
説明
eio_readdir
( string
$path
, int $flags
, int $pri
, callable $callback
[, string $data = NULL
] ) : resource
ディレクトリ全体を (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(integer) - eio_readdir() のフラグ。指定すると、コールバックの result 引数が次のキーを持つ配列になります。 'names' - ディレクトリ名の配列/ 'dents' - struct eio_dirent 風の配列で、 それぞれがさらに以下のキーを持ちます ( 'name' - ディレクトリ名/ 'type' - EIO_DT_* 定数のいずれか/ 'inode' - inode 番号。存在しない場合は不定 )
-
EIO_READDIR_DIRS_FIRST(integer) - このフラグを指定すると、ディレクトリをまず最初に返して stat に最適化した順に返します。
-
EIO_READDIR_STAT_ORDER(integer) - このフラグを指定すると、名前を返すときの順序が 各ファイルを stat するのに適した順となります。 指定したディレクトリにあるすべてのファイルを stat() するつもりなら、この順にしておけば最速になります。
-
EIO_READDIR_FOUND_UNKNOWN(integer)
ノード型
-
EIO_DT_UNKNOWN(integer) - 不明なノード型 (ありがち)。さらに stat() が必要です。
-
EIO_DT_FIFO(integer) - FIFO ノード型
-
EIO_DT_CHR(integer) - ノード型
-
EIO_DT_MPC(integer) - 多重化キャラクタデバイス (v7+coherent) ノード型
-
EIO_DT_DIR(integer) - ディレクトリノード型
-
EIO_DT_NAM(integer) - Xenix 名前付きファイルノード型
-
EIO_DT_BLK(integer) - ノード型
-
EIO_DT_MPB(integer) - 多重化ブロックデバイス (v7+coherent)
-
EIO_DT_REG(integer) - ノード型
-
EIO_DT_NWK(integer) -
EIO_DT_CMP(integer) - HP-UX ネットワークノード型
-
EIO_DT_LNK(integer) - リンクノード型
-
EIO_DT_SOCK(integer) - ソケットノード型
-
EIO_DT_DOOR(integer) - Solaris door ノード型
-
EIO_DT_WHT(integer) - ノード型
-
EIO_DT_MAX(integer) - ノード型の最大値
例
例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)
}
}
}