… | |
… | |
90 | |
90 | |
91 | # file contents now in $contents |
91 | # file contents now in $contents |
92 | print $contents; |
92 | print $contents; |
93 | |
93 | |
94 | # exit event loop and program |
94 | # exit event loop and program |
95 | EV::unloop; |
95 | EV::break; |
96 | }; |
96 | }; |
97 | }; |
97 | }; |
98 | |
98 | |
99 | # possibly queue up other requests, or open GUI windows, |
99 | # possibly queue up other requests, or open GUI windows, |
100 | # check for sockets etc. etc. |
100 | # check for sockets etc. etc. |
101 | |
101 | |
102 | # process events as long as there are some: |
102 | # process events as long as there are some: |
103 | EV::loop; |
103 | EV::run; |
104 | |
104 | |
105 | REQUEST ANATOMY AND LIFETIME |
105 | REQUEST ANATOMY AND LIFETIME |
106 | Every "aio_*" function creates a request. which is a C data structure |
106 | Every "aio_*" function creates a request. which is a C data structure |
107 | not directly visible to Perl. |
107 | not directly visible to Perl. |
108 | |
108 | |
… | |
… | |
330 | "O_APPEND"), the following POSIX and non-POSIX constants are |
330 | "O_APPEND"), the following POSIX and non-POSIX constants are |
331 | available (missing ones on your system are, as usual, 0): |
331 | available (missing ones on your system are, as usual, 0): |
332 | |
332 | |
333 | "O_ASYNC", "O_DIRECT", "O_NOATIME", "O_CLOEXEC", "O_NOCTTY", |
333 | "O_ASYNC", "O_DIRECT", "O_NOATIME", "O_CLOEXEC", "O_NOCTTY", |
334 | "O_NOFOLLOW", "O_NONBLOCK", "O_EXEC", "O_SEARCH", "O_DIRECTORY", |
334 | "O_NOFOLLOW", "O_NONBLOCK", "O_EXEC", "O_SEARCH", "O_DIRECTORY", |
335 | "O_DSYNC", "O_RSYNC", "O_SYNC" and "O_TTY_INIT". |
335 | "O_DSYNC", "O_RSYNC", "O_SYNC", "O_PATH", "O_TMPFILE", and |
|
|
336 | "O_TTY_INIT". |
336 | |
337 | |
337 | aio_close $fh, $callback->($status) |
338 | aio_close $fh, $callback->($status) |
338 | Asynchronously close a file and call the callback with the result |
339 | Asynchronously close a file and call the callback with the result |
339 | code. |
340 | code. |
340 | |
341 | |
… | |
… | |
553 | 0x00001373 devfs |
554 | 0x00001373 devfs |
554 | 0x00001cd1 devpts |
555 | 0x00001cd1 devpts |
555 | 0x0000f15f ecryptfs |
556 | 0x0000f15f ecryptfs |
556 | 0x00414a53 efs |
557 | 0x00414a53 efs |
557 | 0x0000137d ext |
558 | 0x0000137d ext |
558 | 0x0000ef53 ext2/ext3 |
559 | 0x0000ef53 ext2/ext3/ext4 |
559 | 0x0000ef51 ext2 |
560 | 0x0000ef51 ext2 |
|
|
561 | 0xf2f52010 f2fs |
560 | 0x00004006 fat |
562 | 0x00004006 fat |
561 | 0x65735546 fuseblk |
563 | 0x65735546 fuseblk |
562 | 0x65735543 fusectl |
564 | 0x65735543 fusectl |
563 | 0x0bad1dea futexfs |
565 | 0x0bad1dea futexfs |
564 | 0x01161970 gfs2 |
566 | 0x01161970 gfs2 |
565 | 0x47504653 gpfs |
567 | 0x47504653 gpfs |
566 | 0x00004244 hfs |
568 | 0x00004244 hfs |
567 | 0xf995e849 hpfs |
569 | 0xf995e849 hpfs |
|
|
570 | 0x00c0ffee hostfs |
568 | 0x958458f6 hugetlbfs |
571 | 0x958458f6 hugetlbfs |
569 | 0x2bad1dea inotifyfs |
572 | 0x2bad1dea inotifyfs |
570 | 0x00009660 isofs |
573 | 0x00009660 isofs |
571 | 0x000072b6 jffs2 |
574 | 0x000072b6 jffs2 |
572 | 0x3153464a jfs |
575 | 0x3153464a jfs |
… | |
… | |
587 | 0x00009fa1 openprom |
590 | 0x00009fa1 openprom |
588 | 0x7461636F ocfs2 |
591 | 0x7461636F ocfs2 |
589 | 0x00009fa0 proc |
592 | 0x00009fa0 proc |
590 | 0x6165676c pstorefs |
593 | 0x6165676c pstorefs |
591 | 0x0000002f qnx4 |
594 | 0x0000002f qnx4 |
|
|
595 | 0x68191122 qnx6 |
592 | 0x858458f6 ramfs |
596 | 0x858458f6 ramfs |
593 | 0x52654973 reiserfs |
597 | 0x52654973 reiserfs |
594 | 0x00007275 romfs |
598 | 0x00007275 romfs |
595 | 0x67596969 rpc_pipefs |
599 | 0x67596969 rpc_pipefs |
596 | 0x73636673 securityfs |
600 | 0x73636673 securityfs |
… | |
… | |
646 | |
650 | |
647 | aio_allocate $fh, $mode, $offset, $len, $callback->($status) |
651 | aio_allocate $fh, $mode, $offset, $len, $callback->($status) |
648 | Allocates or frees disk space according to the $mode argument. See |
652 | Allocates or frees disk space according to the $mode argument. See |
649 | the linux "fallocate" documentation for details. |
653 | the linux "fallocate" documentation for details. |
650 | |
654 | |
651 | $mode can currently be 0 or "IO::AIO::FALLOC_FL_KEEP_SIZE" to |
655 | $mode is usually 0 or "IO::AIO::FALLOC_FL_KEEP_SIZE" to allocate |
652 | allocate space, or "IO::AIO::FALLOC_FL_PUNCH_HOLE | |
656 | space, or "IO::AIO::FALLOC_FL_PUNCH_HOLE | |
653 | IO::AIO::FALLOC_FL_KEEP_SIZE", to deallocate a file range. |
657 | IO::AIO::FALLOC_FL_KEEP_SIZE", to deallocate a file range. |
|
|
658 | |
|
|
659 | IO::AIO also supports "FALLOC_FL_COLLAPSE_RANGE", to remove a range |
|
|
660 | (without leaving a hole) and "FALLOC_FL_ZERO_RANGE", to zero a range |
|
|
661 | (see your fallocate(2) manpage). |
654 | |
662 | |
655 | The file system block size used by "fallocate" is presumably the |
663 | The file system block size used by "fallocate" is presumably the |
656 | "f_bsize" returned by "statvfs". |
664 | "f_bsize" returned by "statvfs". |
657 | |
665 | |
658 | If "fallocate" isn't available or cannot be emulated (currently no |
666 | If "fallocate" isn't available or cannot be emulated (currently no |
… | |
… | |
1628 | "IO::AIO::PROT_EXEC", "IO::AIO::PROT_READ" and/or |
1636 | "IO::AIO::PROT_EXEC", "IO::AIO::PROT_READ" and/or |
1629 | "IO::AIO::PROT_WRITE", |
1637 | "IO::AIO::PROT_WRITE", |
1630 | |
1638 | |
1631 | $flags can be a combination of "IO::AIO::MAP_SHARED" or |
1639 | $flags can be a combination of "IO::AIO::MAP_SHARED" or |
1632 | "IO::AIO::MAP_PRIVATE", or a number of system-specific flags (when |
1640 | "IO::AIO::MAP_PRIVATE", or a number of system-specific flags (when |
1633 | not available, the are defined as 0): "IO::AIO::MAP_ANONYMOUS" |
1641 | not available, the are 0): "IO::AIO::MAP_ANONYMOUS" (which is set to |
1634 | (which is set to "MAP_ANON" if your system only provides this |
1642 | "MAP_ANON" if your system only provides this constant), |
1635 | constant), "IO::AIO::MAP_HUGETLB", "IO::AIO::MAP_LOCKED", |
1643 | "IO::AIO::MAP_HUGETLB", "IO::AIO::MAP_LOCKED", |
1636 | "IO::AIO::MAP_NORESERVE", "IO::AIO::MAP_POPULATE" or |
1644 | "IO::AIO::MAP_NORESERVE", "IO::AIO::MAP_POPULATE", |
1637 | "IO::AIO::MAP_NONBLOCK" |
1645 | "IO::AIO::MAP_NONBLOCK", "IO::AIO::MAP_FIXED", |
|
|
1646 | "IO::AIO::MAP_GROWSDOWN", "IO::AIO::MAP_32BIT", |
|
|
1647 | "IO::AIO::MAP_HUGETLB" or "IO::AIO::MAP_STACK". |
1638 | |
1648 | |
1639 | If $fh is "undef", then a file descriptor of -1 is passed. |
1649 | If $fh is "undef", then a file descriptor of -1 is passed. |
1640 | |
1650 | |
1641 | $offset is the offset from the start of the file - it generally must |
1651 | $offset is the offset from the start of the file - it generally must |
1642 | be a multiple of "IO::AIO::PAGESIZE" and defaults to 0. |
1652 | be a multiple of "IO::AIO::PAGESIZE" and defaults to 0. |
… | |
… | |
1688 | $actual_size = IO::AIO::pipesize $r_fh[, $new_size] |
1698 | $actual_size = IO::AIO::pipesize $r_fh[, $new_size] |
1689 | Attempts to query or change the pipe buffer size. Obviously works |
1699 | Attempts to query or change the pipe buffer size. Obviously works |
1690 | only on pipes, and currently works only on GNU/Linux systems, and |
1700 | only on pipes, and currently works only on GNU/Linux systems, and |
1691 | fails with -1/"ENOSYS" everywhere else. If anybody knows how to |
1701 | fails with -1/"ENOSYS" everywhere else. If anybody knows how to |
1692 | influence pipe buffer size on other systems, drop me a note. |
1702 | influence pipe buffer size on other systems, drop me a note. |
|
|
1703 | |
|
|
1704 | ($rfh, $wfh) = IO::AIO::pipe2 [$flags] |
|
|
1705 | This is a direct interface to the Linux pipe2(2) system call. If |
|
|
1706 | $flags is missing or 0, then this should be the same as a call to |
|
|
1707 | perl's built-in "pipe" function and create a new pipe, and works on |
|
|
1708 | systems that lack the pipe2 syscall. On win32, this case invokes |
|
|
1709 | "_pipe (..., 4096, O_BINARY)". |
|
|
1710 | |
|
|
1711 | If $flags is non-zero, it tries to invoke the pipe2 system call with |
|
|
1712 | the given flags (Linux 2.6.27, glibc 2.9). |
|
|
1713 | |
|
|
1714 | On success, the read and write file handles are returned. |
|
|
1715 | |
|
|
1716 | On error, nothing will be returned. If the pipe2 syscall is missing |
|
|
1717 | and $flags is non-zero, fails with "ENOSYS". |
|
|
1718 | |
|
|
1719 | Please refer to pipe2(2) for more info on the $flags, but at the |
|
|
1720 | time of this writing, "IO::AIO::O_CLOEXEC", "IO::AIO::O_NONBLOCK" |
|
|
1721 | and "IO::AIO::O_DIRECT" (Linux 3.4, for packet-based pipes) were |
|
|
1722 | supported. |
1693 | |
1723 | |
1694 | EVENT LOOP INTEGRATION |
1724 | EVENT LOOP INTEGRATION |
1695 | It is recommended to use AnyEvent::AIO to integrate IO::AIO |
1725 | It is recommended to use AnyEvent::AIO to integrate IO::AIO |
1696 | automatically into many event loops: |
1726 | automatically into many event loops: |
1697 | |
1727 | |