Coro::AIO - truly asynchronous file and directrory I/O
use Coro::AIO; # can now use any of # aio_sendfile aio_read aio_write aio_open aio_close aio_stat aio_lstat # aio_unlink aio_rmdir aio_readdir aio_scandir aio_symlink aio_fsync # aio_fdatasync aio_readahead # read 1MB of /etc/passwd, without blocking other coroutines my $fh = aio_open "/etc/passwd", O_RDONLY, 0 or die "/etc/passwd: $!"; aio_read $fh, 0, 1_000_000, my $buf, 0 or die "aio_read: $!"; aio_close $fh;
This module implements a thin wrapper around IO::AIO. All of the functions that expect a callback are being wrapped by this module.
The API is exactly the same as that of the corresponding IO::AIO routines, except that you have to specify all arguments except the callback argument. Instead the routines return the values normally passed to the callback. Everything else, including $! and perls stat cache, are set as expected after these functions return.
$!
You can mix calls to IO::AIO functions with calls to this module. You must not, however, call these routines from within IO::AIO callbacks, as this causes a deadlock. Start a coro inside the callback instead.
IO::AIO
You also can, but do not need to, call IO::AIO::poll_cb, as this module automatically installs an event watcher for the IO::AIO file descriptor. It uses the AnyEvent module for this, so please refer to its documentation on how it selects an appropriate Event module.
IO::AIO::poll_cb
For your convienience, here are the changed function signatures, for documentation of these functions please have a look at IO::AIO.
Coro::Socket and Coro::Handle for non-blocking file operation.
Marc Lehmann <schmorp@schmorp.de> http://home.schmorp.de/
To install Coro, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Coro
CPAN shell
perl -MCPAN -e shell install Coro
For more information on module installation, please visit the detailed CPAN module installation guide.