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