… | |
… | |
469 | will be emulated by simply reading the data, which would have a |
469 | will be emulated by simply reading the data, which would have a |
470 | similar effect. |
470 | similar effect. |
471 | |
471 | |
472 | aio_stat $fh_or_path, $callback->($status) |
472 | aio_stat $fh_or_path, $callback->($status) |
473 | aio_lstat $fh, $callback->($status) |
473 | aio_lstat $fh, $callback->($status) |
474 | Works like perl's "stat" or "lstat" in void context. The callback |
474 | Works almost exactly like perl's "stat" or "lstat" in void context. |
475 | will be called after the stat and the results will be available |
475 | The callback will be called after the stat and the results will be |
476 | using "stat _" or "-s _" etc... |
476 | available using "stat _" or "-s _" and other tests (with the |
|
|
477 | exception of "-B" and "-T"). |
477 | |
478 | |
478 | The pathname passed to "aio_stat" must be absolute. See API NOTES, |
479 | The pathname passed to "aio_stat" must be absolute. See API NOTES, |
479 | above, for an explanation. |
480 | above, for an explanation. |
480 | |
481 | |
481 | Currently, the stats are always 64-bit-stats, i.e. instead of |
482 | Currently, the stats are always 64-bit-stats, i.e. instead of |
… | |
… | |
548 | aio_utime $fh_or_path, $atime, $mtime, $callback->($status) |
549 | aio_utime $fh_or_path, $atime, $mtime, $callback->($status) |
549 | Works like perl's "utime" function (including the special case of |
550 | Works like perl's "utime" function (including the special case of |
550 | $atime and $mtime being undef). Fractional times are supported if |
551 | $atime and $mtime being undef). Fractional times are supported if |
551 | the underlying syscalls support them. |
552 | the underlying syscalls support them. |
552 | |
553 | |
553 | When called with a pathname, uses utimes(2) if available, otherwise |
554 | When called with a pathname, uses utimensat(2) or utimes(2) if |
554 | utime(2). If called on a file descriptor, uses futimes(2) if |
555 | available, otherwise utime(2). If called on a file descriptor, uses |
555 | available, otherwise returns ENOSYS, so this is not portable. |
556 | futimens(2) or futimes(2) if available, otherwise returns ENOSYS, so |
|
|
557 | this is not portable. |
556 | |
558 | |
557 | Examples: |
559 | Examples: |
558 | |
560 | |
559 | # set atime and mtime to current time (basically touch(1)): |
561 | # set atime and mtime to current time (basically touch(1)): |
560 | aio_utime "path", undef, undef; |
562 | aio_utime "path", undef, undef; |
… | |
… | |
1451 | Strictly equivalent to: |
1453 | Strictly equivalent to: |
1452 | |
1454 | |
1453 | IO::AIO::poll_wait, IO::AIO::poll_cb |
1455 | IO::AIO::poll_wait, IO::AIO::poll_cb |
1454 | while IO::AIO::nreqs; |
1456 | while IO::AIO::nreqs; |
1455 | |
1457 | |
|
|
1458 | This function can be useful at program aborts, to make sure |
|
|
1459 | outstanding I/O has been done ("IO::AIO" uses an "END" block which |
|
|
1460 | already calls this function on normal exits), or when you are merely |
|
|
1461 | using "IO::AIO" for its more advanced functions, rather than for |
|
|
1462 | async I/O, e.g.: |
|
|
1463 | |
|
|
1464 | my ($dirs, $nondirs); |
|
|
1465 | IO::AIO::aio_scandir "/tmp", 0, sub { ($dirs, $nondirs) = @_ }; |
|
|
1466 | IO::AIO::flush; |
|
|
1467 | # $dirs, $nondirs are now set |
|
|
1468 | |
1456 | IO::AIO::max_poll_reqs $nreqs |
1469 | IO::AIO::max_poll_reqs $nreqs |
1457 | IO::AIO::max_poll_time $seconds |
1470 | IO::AIO::max_poll_time $seconds |
1458 | These set the maximum number of requests (default 0, meaning |
1471 | These set the maximum number of requests (default 0, meaning |
1459 | infinity) that are being processed by "IO::AIO::poll_cb" in one |
1472 | infinity) that are being processed by "IO::AIO::poll_cb" in one |
1460 | call, respectively the maximum amount of time (default 0, meaning |
1473 | call, respectively the maximum amount of time (default 0, meaning |
… | |
… | |
1614 | |
1627 | |
1615 | On operating systems or file systems where subsecond time resolution is |
1628 | On operating systems or file systems where subsecond time resolution is |
1616 | not supported or could not be detected, a fractional part of 0 is |
1629 | not supported or could not be detected, a fractional part of 0 is |
1617 | returned, so it is always safe to call these functions. |
1630 | returned, so it is always safe to call these functions. |
1618 | |
1631 | |
1619 | $seconds = IO::AIO::st_atime, IO::AIO::st_mtime, IO::AIO::st_ctime |
1632 | $seconds = IO::AIO::st_atime, IO::AIO::st_mtime, IO::AIO::st_ctime, |
|
|
1633 | IO::AIO::st_btime |
1620 | Return the access, modication or change time, respectively, |
1634 | Return the access, modication, change or birth time, respectively, |
1621 | including fractional part. Due to the limited precision of floating |
1635 | including fractional part. Due to the limited precision of floating |
1622 | point, the accuracy on most platforms is only a bit better than |
1636 | point, the accuracy on most platforms is only a bit better than |
1623 | milliseconds for times around now - see the *nsec* function family, |
1637 | milliseconds for times around now - see the *nsec* function family, |
1624 | below, for full accuracy. |
1638 | below, for full accuracy. |
1625 | |
1639 | |
|
|
1640 | File birth time is only available when the OS and perl support it |
|
|
1641 | (on FreeBSD and NetBSD at the time of this writing, although support |
|
|
1642 | is adaptive, so if your OS/perl gains support, IO::AIO can take |
|
|
1643 | avdantage of it). On systems where it isn't available, 0 is |
|
|
1644 | currently returned, but this might change to "undef" in a future |
|
|
1645 | version. |
|
|
1646 | |
1626 | ($atime, $mtime, $ctime, ...) = IO::AIO::st_xtime |
1647 | ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtime |
1627 | Returns access, modification and change time all in one go, and |
1648 | Returns access, modification, change and birth time all in one go, |
1628 | maybe more times in the future version. |
1649 | and maybe more times in the future version. |
1629 | |
1650 | |
1630 | $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, |
1651 | $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, |
1631 | IO::AIO::st_ctimensec |
1652 | IO::AIO::st_ctimensec, IO::AIO::st_btimensec |
1632 | Return the fractional access, modifcation or change time, in |
1653 | Return the fractional access, modifcation, change or birth time, in |
1633 | nanoseconds, as an integer in the range 0 to 999999999. |
1654 | nanoseconds, as an integer in the range 0 to 999999999. |
1634 | |
1655 | |
|
|
1656 | Note that no accessors are provided for access, modification and |
|
|
1657 | change times - you need to get those from "stat _" if required ("int |
|
|
1658 | IO::AIO::st_atime" and so on will *not* generally give you the |
|
|
1659 | correct value). |
|
|
1660 | |
|
|
1661 | $seconds = IO::AIO::st_btimesec |
|
|
1662 | The (integral) seconds part of the file birth time, if available. |
|
|
1663 | |
1635 | ($atime, $mtime, $ctime, ...) = IO::AIO::st_xtimensec |
1664 | ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec |
1636 | Like the functions above, but returns all three times in one go (and |
1665 | Like the functions above, but returns all four times in one go (and |
1637 | maybe more in future versions). |
1666 | maybe more in future versions). |
|
|
1667 | |
|
|
1668 | $counter = IO::AIO::st_gen |
|
|
1669 | Returns the generation counter of the file. This is only available |
|
|
1670 | on platforms which have this member in their "struct stat" (most |
|
|
1671 | BSDs at the time of this writing) and generally only to the root |
|
|
1672 | usert. If unsupported, 0 is returned, but this might change to |
|
|
1673 | "undef" in a future version. |
1638 | |
1674 | |
1639 | Example: print the high resolution modification time of /etc, using |
1675 | Example: print the high resolution modification time of /etc, using |
1640 | "stat", and "IO::AIO::aio_stat". |
1676 | "stat", and "IO::AIO::aio_stat". |
1641 | |
1677 | |
1642 | if (stat "/etc") { |
1678 | if (stat "/etc") { |