… | |
… | |
168 | use common::sense; |
168 | use common::sense; |
169 | |
169 | |
170 | use base 'Exporter'; |
170 | use base 'Exporter'; |
171 | |
171 | |
172 | BEGIN { |
172 | BEGIN { |
173 | our $VERSION = '4.0'; |
173 | our $VERSION = '4.11'; |
174 | |
174 | |
175 | our @AIO_REQ = qw(aio_sendfile aio_read aio_write aio_open aio_close |
175 | our @AIO_REQ = qw(aio_sendfile aio_read aio_write aio_open aio_close |
176 | aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx |
176 | aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx |
177 | aio_scandir aio_symlink aio_readlink aio_realpath aio_sync |
177 | aio_scandir aio_symlink aio_readlink aio_realpath aio_sync |
178 | aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range aio_fallocate |
178 | aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range aio_fallocate |
… | |
… | |
233 | aio_rmdir $pathname, $callback->($status) |
233 | aio_rmdir $pathname, $callback->($status) |
234 | aio_readdir $pathname, $callback->($entries) |
234 | aio_readdir $pathname, $callback->($entries) |
235 | aio_readdirx $pathname, $flags, $callback->($entries, $flags) |
235 | aio_readdirx $pathname, $flags, $callback->($entries, $flags) |
236 | IO::AIO::READDIR_DENTS IO::AIO::READDIR_DIRS_FIRST |
236 | IO::AIO::READDIR_DENTS IO::AIO::READDIR_DIRS_FIRST |
237 | IO::AIO::READDIR_STAT_ORDER IO::AIO::READDIR_FOUND_UNKNOWN |
237 | IO::AIO::READDIR_STAT_ORDER IO::AIO::READDIR_FOUND_UNKNOWN |
|
|
238 | aio_scandir $pathname, $maxreq, $callback->($dirs, $nondirs) |
238 | aio_load $pathname, $data, $callback->($status) |
239 | aio_load $pathname, $data, $callback->($status) |
239 | aio_copy $srcpath, $dstpath, $callback->($status) |
240 | aio_copy $srcpath, $dstpath, $callback->($status) |
240 | aio_move $srcpath, $dstpath, $callback->($status) |
241 | aio_move $srcpath, $dstpath, $callback->($status) |
241 | aio_scandir $pathname, $maxreq, $callback->($dirs, $nondirs) |
|
|
242 | aio_rmtree $pathname, $callback->($status) |
242 | aio_rmtree $pathname, $callback->($status) |
243 | aio_sync $callback->($status) |
243 | aio_sync $callback->($status) |
244 | aio_syncfs $fh, $callback->($status) |
244 | aio_syncfs $fh, $callback->($status) |
245 | aio_fsync $fh, $callback->($status) |
245 | aio_fsync $fh, $callback->($status) |
246 | aio_fdatasync $fh, $callback->($status) |
246 | aio_fdatasync $fh, $callback->($status) |
… | |
… | |
1304 | object. This object stores the canonicalised, absolute version of the |
1304 | object. This object stores the canonicalised, absolute version of the |
1305 | path, and on systems that allow it, also a directory file descriptor. |
1305 | path, and on systems that allow it, also a directory file descriptor. |
1306 | |
1306 | |
1307 | Everywhere where a pathname is accepted by IO::AIO (e.g. in C<aio_stat> |
1307 | Everywhere where a pathname is accepted by IO::AIO (e.g. in C<aio_stat> |
1308 | or C<aio_unlink>), one can specify an array reference with an IO::AIO::WD |
1308 | or C<aio_unlink>), one can specify an array reference with an IO::AIO::WD |
1309 | object and a pathname instead. If the pathname is absolute, the |
1309 | object and a pathname instead (or the IO::AIO::WD object alone, which |
|
|
1310 | gets interpreted as C<[$wd, "."]>). If the pathname is absolute, the |
1310 | IO::AIO::WD objetc is ignored, otherwise the pathname is resolved relative |
1311 | IO::AIO::WD object is ignored, otherwise the pathname is resolved relative |
1311 | to that IO::AIO::WD object. |
1312 | to that IO::AIO::WD object. |
1312 | |
1313 | |
1313 | For example, to get a wd object for F</etc> and then stat F<passwd> |
1314 | For example, to get a wd object for F</etc> and then stat F<passwd> |
1314 | inside, you would write: |
1315 | inside, you would write: |
1315 | |
1316 | |
… | |
… | |
1323 | aio_stat [$etcdir, "passwd"], sub { |
1324 | aio_stat [$etcdir, "passwd"], sub { |
1324 | # yay |
1325 | # yay |
1325 | }; |
1326 | }; |
1326 | }; |
1327 | }; |
1327 | |
1328 | |
1328 | This shows that creating an IO::AIO::WD object is itself a potentially |
1329 | That C<aio_wd> is a request and not a normal function shows that creating |
1329 | blocking operation, which is why it is done asynchronously. |
1330 | an IO::AIO::WD object is itself a potentially blocking operation, which is |
|
|
1331 | why it is done asynchronously. |
|
|
1332 | |
|
|
1333 | To stat the directory obtained with C<aio_wd> above, one could write |
|
|
1334 | either of the following three request calls: |
|
|
1335 | |
|
|
1336 | aio_lstat "/etc" , sub { ... # pathname as normal string |
|
|
1337 | aio_lstat [$wd, "."], sub { ... # "." relative to $wd (i.e. $wd itself) |
|
|
1338 | aio_lstat $wd , sub { ... # shorthand for the previous |
1330 | |
1339 | |
1331 | As with normal pathnames, IO::AIO keeps a copy of the working directory |
1340 | As with normal pathnames, IO::AIO keeps a copy of the working directory |
1332 | object and the pathname string, so you could write the following without |
1341 | object and the pathname string, so you could write the following without |
1333 | causing any issues due to C<$path> getting reused: |
1342 | causing any issues due to C<$path> getting reused: |
1334 | |
1343 | |