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
(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) { ["name"]=> string(8) "overview" ["type"]=> int(4) ["inode"]=> int(393271) } [6]=> array(3) { ["name"]=> string(3) "tmp" ["type"]=> int(4) ["inode"]=> int(393272) } } }