eio_readdir

Reads through a whole directory

&reftitle.description; `resource` `eio_readdir` `string` `path` `int` `flags` `int` `pri` `callable` `callback` `string` `data` NULL

Reads through a whole directory(via the `opendir`, `readdir` and `closedir` system calls) and returns either the names or an array in `result` argument of `callback` function, depending on the `flags` argument.

&reftitle.parameters;

`path`

- Directory path.

`flags`

- Combination of EIO_READDIR_* constants.

`pri`

- &eio.request.pri.values;

`callback`

- &eio.callback.proto;

`data`

- Arbitrary variable passed to `callback`.

&reftitle.returnvalues;

`eio_readdir` returns request resource on success,&return.falseforfailure;. Sets `result` argument of `callback` function according to `flags`:

`EIO_READDIR_DENTS` (`int`)

- `eio_readdir` flag. If specified, the result argument of the callback becomes an array with the following keys: `'names'` - array of directory names `'dents'` - array of `struct eio_dirent`-like arrays having the following keys each: `'name'` - the directory name; `'type'` - one of EIO_DT_* constants; `'inode'` - the inode number, if available, otherwise unspecified;

`EIO_READDIR_DIRS_FIRST` (`int`)

- When this flag is specified, the names will be returned in an order where likely directories come first, in optimal stat order.

`EIO_READDIR_STAT_ORDER` (`int`)

- When this flag is specified, then the names will be returned in an order suitable for `stat`'ing each one. When planning to `stat` all files in the given directory, the returned order will likely be fastest.

`EIO_READDIR_FOUND_UNKNOWN` (`int`)

Node types:

`EIO_DT_UNKNOWN` (`int`)

- Unknown node type(very common). Further `stat` needed.

`EIO_DT_FIFO` (`int`)

- FIFO node type

`EIO_DT_CHR` (`int`)

- Node type

`EIO_DT_MPC` (`int`)

- Multiplexed char device (v7+coherent) node type

`EIO_DT_DIR` (`int`)

- Directory node type

`EIO_DT_NAM` (`int`)

- Xenix special named file node type

`EIO_DT_BLK` (`int`)

- Node type

`EIO_DT_MPB` (`int`)

- Multiplexed block device (v7+coherent)

`EIO_DT_REG` (`int`)

- Node type

`EIO_DT_NWK` (`int`)

`EIO_DT_CMP` (`int`)

- HP-UX network special node type

`EIO_DT_LNK` (`int`)

- Link node type

`EIO_DT_SOCK` (`int`)

- Socket node type

`EIO_DT_DOOR` (`int`)

- Solaris door node type

`EIO_DT_WHT` (`int`)

- Node type

`EIO_DT_MAX` (`int`)

- Highest node type value

&reftitle.examples;

### `eio_readdir` example

    <?php
    /* Is called when eio_readdir() finishes */
    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();
    ?>

&example.outputs.similar;

    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)
        }
      }
    }