eio_readahead
eio_readlink
Eio 関数
PHP Manual

# eio_readdir

(PECL eio >= 0.0.1dev)

eio_readdir — ディレクトリ全体を読み込む

### 説明

resource eio_readdir ( string `$path` , int `$flags` , int `$pri` , callable `$callback` [, string `$data` = NULL ] )

ディレクトリ全体を (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)
        }
      }
    }

eio_readahead
eio_readlink
Eio 関数
PHP Manual