1AIO(3)                User Contributed Perl Documentation               AIO(3)
2
3
4

NAME

6       IO::AIO - Asynchronous/Advanced Input/Output
7

SYNOPSIS

9        use IO::AIO;
10
11        aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub {
12           my $fh = shift
13              or die "/etc/passwd: $!";
14           ...
15        };
16
17        aio_unlink "/tmp/file", sub { };
18
19        aio_read $fh, 30000, 1024, $buffer, 0, sub {
20           $_[0] > 0 or die "read error: $!";
21        };
22
23        # version 2+ has request and group objects
24        use IO::AIO 2;
25
26        aioreq_pri 4; # give next request a very high priority
27        my $req = aio_unlink "/tmp/file", sub { };
28        $req->cancel; # cancel request if still in queue
29
30        my $grp = aio_group sub { print "all stats done\n" };
31        add $grp aio_stat "..." for ...;
32

DESCRIPTION

34       This module implements asynchronous I/O using whatever means your
35       operating system supports. It is implemented as an interface to
36       "libeio" (<http://software.schmorp.de/pkg/libeio.html>).
37
38       Asynchronous means that operations that can normally block your program
39       (e.g. reading from disk) will be done asynchronously: the operation
40       will still block, but you can do something else in the meantime. This
41       is extremely useful for programs that need to stay interactive even
42       when doing heavy I/O (GUI programs, high performance network servers
43       etc.), but can also be used to easily do operations in parallel that
44       are normally done sequentially, e.g. stat'ing many files, which is much
45       faster on a RAID volume or over NFS when you do a number of stat
46       operations concurrently.
47
48       While most of this works on all types of file descriptors (for example
49       sockets), using these functions on file descriptors that support
50       nonblocking operation (again, sockets, pipes etc.) is very inefficient.
51       Use an event loop for that (such as the EV module): IO::AIO will
52       naturally fit into such an event loop itself.
53
54       In this version, a number of threads are started that execute your
55       requests and signal their completion. You don't need thread support in
56       perl, and the threads created by this module will not be visible to
57       perl. In the future, this module might make use of the native aio
58       functions available on many operating systems. However, they are often
59       not well-supported or restricted (GNU/Linux doesn't allow them on
60       normal files currently, for example), and they would only support
61       aio_read and aio_write, so the remaining functionality would have to be
62       implemented using threads anyway.
63
64       In addition to asynchronous I/O, this module also exports some rather
65       arcane interfaces, such as "madvise" or linux's "splice" system call,
66       which is why the "A" in "AIO" can also mean advanced.
67
68       Although the module will work in the presence of other (Perl-) threads,
69       it is currently not reentrant in any way, so use appropriate locking
70       yourself, always call "poll_cb" from within the same thread, or never
71       call "poll_cb" (or other "aio_" functions) recursively.
72
73   EXAMPLE
74       This is a simple example that uses the EV module and loads /etc/passwd
75       asynchronously:
76
77          use EV;
78          use IO::AIO;
79
80          # register the IO::AIO callback with EV
81          my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb;
82
83          # queue the request to open /etc/passwd
84          aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub {
85             my $fh = shift
86                or die "error while opening: $!";
87
88             # stat'ing filehandles is generally non-blocking
89             my $size = -s $fh;
90
91             # queue a request to read the file
92             my $contents;
93             aio_read $fh, 0, $size, $contents, 0, sub {
94                $_[0] == $size
95                   or die "short read: $!";
96
97                close $fh;
98
99                # file contents now in $contents
100                print $contents;
101
102                # exit event loop and program
103                EV::break;
104             };
105          };
106
107          # possibly queue up other requests, or open GUI windows,
108          # check for sockets etc. etc.
109
110          # process events as long as there are some:
111          EV::run;
112

REQUEST ANATOMY AND LIFETIME

114       Every "aio_*" function creates a request. which is a C data structure
115       not directly visible to Perl.
116
117       If called in non-void context, every request function returns a Perl
118       object representing the request. In void context, nothing is returned,
119       which saves a bit of memory.
120
121       The perl object is a fairly standard ref-to-hash object. The hash
122       contents are not used by IO::AIO so you are free to store anything you
123       like in it.
124
125       During their existance, aio requests travel through the following
126       states, in order:
127
128       ready
129           Immediately after a request is created it is put into the ready
130           state, waiting for a thread to execute it.
131
132       execute
133           A thread has accepted the request for processing and is currently
134           executing it (e.g. blocking in read).
135
136       pending
137           The request has been executed and is waiting for result processing.
138
139           While request submission and execution is fully asynchronous,
140           result processing is not and relies on the perl interpreter calling
141           "poll_cb" (or another function with the same effect).
142
143       result
144           The request results are processed synchronously by "poll_cb".
145
146           The "poll_cb" function will process all outstanding aio requests by
147           calling their callbacks, freeing memory associated with them and
148           managing any groups they are contained in.
149
150       done
151           Request has reached the end of its lifetime and holds no resources
152           anymore (except possibly for the Perl object, but its connection to
153           the actual aio request is severed and calling its methods will
154           either do nothing or result in a runtime error).
155

FUNCTIONS

157   QUICK OVERVIEW
158       This section simply lists the prototypes most of the functions for
159       quick reference. See the following sections for function-by-function
160       documentation.
161
162          aio_wd $pathname, $callback->($wd)
163          aio_open $pathname, $flags, $mode, $callback->($fh)
164          aio_close $fh, $callback->($status)
165          aio_seek  $fh,$offset,$whence, $callback->($offs)
166          aio_read  $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
167          aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
168          aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
169          aio_readahead $fh,$offset,$length, $callback->($retval)
170          aio_stat  $fh_or_path, $callback->($status)
171          aio_lstat $fh, $callback->($status)
172          aio_statvfs $fh_or_path, $callback->($statvfs)
173          aio_utime $fh_or_path, $atime, $mtime, $callback->($status)
174          aio_chown $fh_or_path, $uid, $gid, $callback->($status)
175          aio_chmod $fh_or_path, $mode, $callback->($status)
176          aio_truncate $fh_or_path, $offset, $callback->($status)
177          aio_allocate $fh, $mode, $offset, $len, $callback->($status)
178          aio_fiemap $fh, $start, $length, $flags, $count, $cb->(\@extents)
179          aio_unlink $pathname, $callback->($status)
180          aio_mknod $pathname, $mode, $dev, $callback->($status)
181          aio_link $srcpath, $dstpath, $callback->($status)
182          aio_symlink $srcpath, $dstpath, $callback->($status)
183          aio_readlink $pathname, $callback->($link)
184          aio_realpath $pathname, $callback->($path)
185          aio_rename $srcpath, $dstpath, $callback->($status)
186          aio_rename2 $srcpath, $dstpath, $flags, $callback->($status)
187          aio_mkdir $pathname, $mode, $callback->($status)
188          aio_rmdir $pathname, $callback->($status)
189          aio_readdir $pathname, $callback->($entries)
190          aio_readdirx $pathname, $flags, $callback->($entries, $flags)
191             IO::AIO::READDIR_DENTS IO::AIO::READDIR_DIRS_FIRST
192             IO::AIO::READDIR_STAT_ORDER IO::AIO::READDIR_FOUND_UNKNOWN
193          aio_scandir $pathname, $maxreq, $callback->($dirs, $nondirs)
194          aio_load $pathname, $data, $callback->($status)
195          aio_copy $srcpath, $dstpath, $callback->($status)
196          aio_move $srcpath, $dstpath, $callback->($status)
197          aio_rmtree $pathname, $callback->($status)
198          aio_fcntl $fh, $cmd, $arg, $callback->($status)
199          aio_ioctl $fh, $request, $buf, $callback->($status)
200          aio_sync $callback->($status)
201          aio_syncfs $fh, $callback->($status)
202          aio_fsync $fh, $callback->($status)
203          aio_fdatasync $fh, $callback->($status)
204          aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status)
205          aio_pathsync $pathname, $callback->($status)
206          aio_msync $scalar, $offset = 0, $length = undef, flags = MS_SYNC, $callback->($status)
207          aio_mtouch $scalar, $offset = 0, $length = undef, flags = 0, $callback->($status)
208          aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status)
209          aio_mlockall $flags, $callback->($status)
210          aio_group $callback->(...)
211          aio_nop $callback->()
212
213          $prev_pri = aioreq_pri [$pri]
214          aioreq_nice $pri_adjust
215
216          IO::AIO::poll_wait
217          IO::AIO::poll_cb
218          IO::AIO::poll
219          IO::AIO::flush
220          IO::AIO::max_poll_reqs $nreqs
221          IO::AIO::max_poll_time $seconds
222          IO::AIO::min_parallel $nthreads
223          IO::AIO::max_parallel $nthreads
224          IO::AIO::max_idle $nthreads
225          IO::AIO::idle_timeout $seconds
226          IO::AIO::max_outstanding $maxreqs
227          IO::AIO::nreqs
228          IO::AIO::nready
229          IO::AIO::npending
230          IO::AIO::reinit
231
232          $nfd = IO::AIO::get_fdlimit
233          IO::AIO::min_fdlimit $nfd
234
235          IO::AIO::sendfile $ofh, $ifh, $offset, $count
236          IO::AIO::fadvise $fh, $offset, $len, $advice
237          IO::AIO::fexecve $fh, $argv, $envp
238
239          IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]]
240          IO::AIO::munmap $scalar
241          IO::AIO::mremap $scalar, $new_length, $flags[, $new_address]
242          IO::AIO::madvise $scalar, $offset, $length, $advice
243          IO::AIO::mprotect $scalar, $offset, $length, $protect
244          IO::AIO::munlock $scalar, $offset = 0, $length = undef
245          IO::AIO::munlockall
246
247          # stat extensions
248          $counter = IO::AIO::st_gen
249          $seconds = IO::AIO::st_atime, IO::AIO::st_mtime, IO::AIO::st_ctime, IO::AIO::st_btime
250          ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtime
251          $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, IO::AIO::st_ctimensec, IO::AIO::st_btimensec
252          $seconds = IO::AIO::st_btimesec
253          ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec
254
255          # very much unportable syscalls
256          IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_len, $flags
257          IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags
258          IO::AIO::tee $r_fh, $w_fh, $length, $flags
259
260          $actual_size = IO::AIO::pipesize $r_fh[, $new_size]
261          ($rfh, $wfh) = IO::AIO::pipe2 [$flags]
262
263          $fh = IO::AIO::eventfd [$initval, [$flags]]
264          $fh = IO::AIO::memfd_create $pathname[, $flags]
265
266          $fh = IO::AIO::timerfd_create $clockid[, $flags]
267          ($cur_interval, $cur_value) = IO::AIO::timerfd_settime $fh, $flags, $new_interval, $nbw_value
268          ($cur_interval, $cur_value) = IO::AIO::timerfd_gettime $fh
269
270          $fh = IO::AIO::pidfd_open $pid[, $flags]
271          $status = IO::AIO::pidfd_send_signal $pidfh, $signal[, $siginfo[, $flags]]
272          $fh = IO::AIO::pidfd_getfd $pidfh, $targetfd[, $flags]
273
274          $retval = IO::AIO::mount $special, $path, $fstype, $flags = 0, $data = undef
275          $retval = IO::AIO::umount $path, $flags = 0
276
277   API NOTES
278       All the "aio_*" calls are more or less thin wrappers around the syscall
279       with the same name (sans "aio_"). The arguments are similar or
280       identical, and they all accept an additional (and optional) $callback
281       argument which must be a code reference. This code reference will be
282       called after the syscall has been executed in an asynchronous fashion.
283       The results of the request will be passed as arguments to the callback
284       (and, if an error occured, in $!) - for most requests the syscall
285       return code (e.g.  most syscalls return "-1" on error, unlike perl,
286       which usually delivers "false").
287
288       Some requests (such as "aio_readdir") pass the actual results and
289       communicate failures by passing "undef".
290
291       All functions expecting a filehandle keep a copy of the filehandle
292       internally until the request has finished.
293
294       All functions return request objects of type IO::AIO::REQ that allow
295       further manipulation of those requests while they are in-flight.
296
297       The pathnames you pass to these routines should be absolute. The reason
298       for this is that at the time the request is being executed, the current
299       working directory could have changed. Alternatively, you can make sure
300       that you never change the current working directory anywhere in the
301       program and then use relative paths. You can also take advantage of
302       IO::AIOs working directory abstraction, that lets you specify paths
303       relative to some previously-opened "working directory object" - see the
304       description of the "IO::AIO::WD" class later in this document.
305
306       To encode pathnames as octets, either make sure you either: a) always
307       pass in filenames you got from outside (command line, readdir etc.)
308       without tinkering, b) are in your native filesystem encoding, c) use
309       the Encode module and encode your pathnames to the locale (or other)
310       encoding in effect in the user environment, d) use
311       Glib::filename_from_unicode on unicode filenames or e) use something
312       else to ensure your scalar has the correct contents.
313
314       This works, btw. independent of the internal UTF-8 bit, which IO::AIO
315       handles correctly whether it is set or not.
316
317   AIO REQUEST FUNCTIONS
318       $prev_pri = aioreq_pri [$pri]
319           Returns the priority value that would be used for the next request
320           and, if $pri is given, sets the priority for the next aio request.
321
322           The default priority is 0, the minimum and maximum priorities are
323           "-4" and 4, respectively. Requests with higher priority will be
324           serviced first.
325
326           The priority will be reset to 0 after each call to one of the
327           "aio_*" functions.
328
329           Example: open a file with low priority, then read something from it
330           with higher priority so the read request is serviced before other
331           low priority open requests (potentially spamming the cache):
332
333              aioreq_pri -3;
334              aio_open ..., sub {
335                 return unless $_[0];
336
337                 aioreq_pri -2;
338                 aio_read $_[0], ..., sub {
339                    ...
340                 };
341              };
342
343       aioreq_nice $pri_adjust
344           Similar to "aioreq_pri", but subtracts the given value from the
345           current priority, so the effect is cumulative.
346
347       aio_open $pathname, $flags, $mode, $callback->($fh)
348           Asynchronously open or create a file and call the callback with a
349           newly created filehandle for the file (or "undef" in case of an
350           error).
351
352           The pathname passed to "aio_open" must be absolute. See API NOTES,
353           above, for an explanation.
354
355           The $flags argument is a bitmask. See the "Fcntl" module for a
356           list. They are the same as used by "sysopen".
357
358           Likewise, $mode specifies the mode of the newly created file, if it
359           didn't exist and "O_CREAT" has been given, just like perl's
360           "sysopen", except that it is mandatory (i.e. use 0 if you don't
361           create new files, and 0666 or 0777 if you do). Note that the $mode
362           will be modified by the umask in effect then the request is being
363           executed, so better never change the umask.
364
365           Example:
366
367              aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub {
368                 if ($_[0]) {
369                    print "open successful, fh is $_[0]\n";
370                    ...
371                 } else {
372                    die "open failed: $!\n";
373                 }
374              };
375
376           In addition to all the common open modes/flags ("O_RDONLY",
377           "O_WRONLY", "O_RDWR", "O_CREAT", "O_TRUNC", "O_EXCL" and
378           "O_APPEND"), the following POSIX and non-POSIX constants are
379           available (missing ones on your system are, as usual, 0):
380
381           "O_ASYNC", "O_DIRECT", "O_NOATIME", "O_CLOEXEC", "O_NOCTTY",
382           "O_NOFOLLOW", "O_NONBLOCK", "O_EXEC", "O_SEARCH", "O_DIRECTORY",
383           "O_DSYNC", "O_RSYNC", "O_SYNC", "O_PATH", "O_TMPFILE", "O_TTY_INIT"
384           and "O_ACCMODE".
385
386       aio_close $fh, $callback->($status)
387           Asynchronously close a file and call the callback with the result
388           code.
389
390           Unfortunately, you can't do this to perl. Perl insists very
391           strongly on closing the file descriptor associated with the
392           filehandle itself.
393
394           Therefore, "aio_close" will not close the filehandle - instead it
395           will use dup2 to overwrite the file descriptor with the write-end
396           of a pipe (the pipe fd will be created on demand and will be
397           cached).
398
399           Or in other words: the file descriptor will be closed, but it will
400           not be free for reuse until the perl filehandle is closed.
401
402       aio_seek $fh, $offset, $whence, $callback->($offs)
403           Seeks the filehandle to the new $offset, similarly to perl's
404           "sysseek". The $whence can use the traditional values (0 for
405           "IO::AIO::SEEK_SET", 1 for "IO::AIO::SEEK_CUR" or 2 for
406           "IO::AIO::SEEK_END").
407
408           The resulting absolute offset will be passed to the callback, or
409           "-1" in case of an error.
410
411           In theory, the $whence constants could be different than the
412           corresponding values from Fcntl, but perl guarantees they are the
413           same, so don't panic.
414
415           As a GNU/Linux (and maybe Solaris) extension, also the constants
416           "IO::AIO::SEEK_DATA" and "IO::AIO::SEEK_HOLE" are available, if
417           they could be found. No guarantees about suitability for use in
418           "aio_seek" or Perl's "sysseek" can be made though, although I would
419           naively assume they "just work".
420
421       aio_read  $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
422       aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
423           Reads or writes $length bytes from or to the specified $fh and
424           $offset into the scalar given by $data and offset $dataoffset and
425           calls the callback with the actual number of bytes transferred (or
426           -1 on error, just like the syscall).
427
428           "aio_read" will, like "sysread", shrink or grow the $data scalar to
429           offset plus the actual number of bytes read.
430
431           If $offset is undefined, then the current file descriptor offset
432           will be used (and updated), otherwise the file descriptor offset
433           will not be changed by these calls.
434
435           If $length is undefined in "aio_write", use the remaining length of
436           $data.
437
438           If $dataoffset is less than zero, it will be counted from the end
439           of $data.
440
441           The $data scalar MUST NOT be modified in any way while the request
442           is outstanding. Modifying it can result in segfaults or World War
443           III (if the necessary/optional hardware is installed).
444
445           Example: Read 15 bytes at offset 7 into scalar $buffer, starting at
446           offset 0 within the scalar:
447
448              aio_read $fh, 7, 15, $buffer, 0, sub {
449                 $_[0] > 0 or die "read error: $!";
450                 print "read $_[0] bytes: <$buffer>\n";
451              };
452
453       aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
454           Tries to copy $length bytes from $in_fh to $out_fh. It starts
455           reading at byte offset $in_offset, and starts writing at the
456           current file offset of $out_fh. Because of that, it is not safe to
457           issue more than one "aio_sendfile" per $out_fh, as they will
458           interfere with each other. The same $in_fh works fine though, as
459           this function does not move or use the file offset of $in_fh.
460
461           Please note that "aio_sendfile" can read more bytes from $in_fh
462           than are written, and there is no way to find out how many more
463           bytes have been read from "aio_sendfile" alone, as "aio_sendfile"
464           only provides the number of bytes written to $out_fh. Only if the
465           result value equals $length one can assume that $length bytes have
466           been read.
467
468           Unlike with other "aio_" functions, it makes a lot of sense to use
469           "aio_sendfile" on non-blocking sockets, as long as one end
470           (typically the $in_fh) is a file - the file I/O will then be
471           asynchronous, while the socket I/O will be non-blocking. Note,
472           however, that you can run into a trap where "aio_sendfile" reads
473           some data with readahead, then fails to write all data, and when
474           the socket is ready the next time, the data in the cache is already
475           lost, forcing "aio_sendfile" to again hit the disk. Explicit
476           "aio_read" + "aio_write" let's you better control resource usage.
477
478           This call tries to make use of a native "sendfile"-like syscall to
479           provide zero-copy operation. For this to work, $out_fh should refer
480           to a socket, and $in_fh should refer to an mmap'able file.
481
482           If a native sendfile cannot be found or it fails with "ENOSYS",
483           "EINVAL", "ENOTSUP", "EOPNOTSUPP", "EAFNOSUPPORT", "EPROTOTYPE" or
484           "ENOTSOCK", it will be emulated, so you can call "aio_sendfile" on
485           any type of filehandle regardless of the limitations of the
486           operating system.
487
488           As native sendfile syscalls (as practically any non-POSIX interface
489           hacked together in a hurry to improve benchmark numbers) tend to be
490           rather buggy on many systems, this implementation tries to work
491           around some known bugs in Linux and FreeBSD kernels (probably
492           others, too), but that might fail, so you really really should
493           check the return value of "aio_sendfile" - fewer bytes than
494           expected might have been transferred.
495
496       aio_readahead $fh,$offset,$length, $callback->($retval)
497           "aio_readahead" populates the page cache with data from a file so
498           that subsequent reads from that file will not block on disk I/O.
499           The $offset argument specifies the starting point from which data
500           is to be read and $length specifies the number of bytes to be read.
501           I/O is performed in whole pages, so that offset is effectively
502           rounded down to a page boundary and bytes are read up to the next
503           page boundary greater than or equal to (off-set+length).
504           "aio_readahead" does not read beyond the end of the file. The
505           current file offset of the file is left unchanged.
506
507           If that syscall doesn't exist (likely if your kernel isn't Linux)
508           it will be emulated by simply reading the data, which would have a
509           similar effect.
510
511       aio_stat  $fh_or_path, $callback->($status)
512       aio_lstat $fh, $callback->($status)
513           Works almost exactly like perl's "stat" or "lstat" in void context.
514           The callback will be called after the stat and the results will be
515           available using "stat _" or "-s _" and other tests (with the
516           exception of "-B" and "-T").
517
518           The pathname passed to "aio_stat" must be absolute. See API NOTES,
519           above, for an explanation.
520
521           Currently, the stats are always 64-bit-stats, i.e. instead of
522           returning an error when stat'ing a large file, the results will be
523           silently truncated unless perl itself is compiled with large file
524           support.
525
526           To help interpret the mode and dev/rdev stat values, IO::AIO offers
527           the following constants and functions (if not implemented, the
528           constants will be 0 and the functions will either "croak" or fall
529           back on traditional behaviour).
530
531           "S_IFMT", "S_IFIFO", "S_IFCHR", "S_IFBLK", "S_IFLNK", "S_IFREG",
532           "S_IFDIR", "S_IFWHT", "S_IFSOCK", "IO::AIO::major $dev_t",
533           "IO::AIO::minor $dev_t", "IO::AIO::makedev $major, $minor".
534
535           To access higher resolution stat timestamps, see "SUBSECOND STAT
536           TIME ACCESS".
537
538           Example: Print the length of /etc/passwd:
539
540              aio_stat "/etc/passwd", sub {
541                 $_[0] and die "stat failed: $!";
542                 print "size is ", -s _, "\n";
543              };
544
545       aio_statvfs $fh_or_path, $callback->($statvfs)
546           Works like the POSIX "statvfs" or "fstatvfs" syscalls, depending on
547           whether a file handle or path was passed.
548
549           On success, the callback is passed a hash reference with the
550           following members: "bsize", "frsize", "blocks", "bfree", "bavail",
551           "files", "ffree", "favail", "fsid", "flag" and "namemax". On
552           failure, "undef" is passed.
553
554           The following POSIX IO::AIO::ST_* constants are defined:
555           "ST_RDONLY" and "ST_NOSUID".
556
557           The following non-POSIX IO::AIO::ST_* flag masks are defined to
558           their correct value when available, or to 0 on systems that do not
559           support them:  "ST_NODEV", "ST_NOEXEC", "ST_SYNCHRONOUS",
560           "ST_MANDLOCK", "ST_WRITE", "ST_APPEND", "ST_IMMUTABLE",
561           "ST_NOATIME", "ST_NODIRATIME" and "ST_RELATIME".
562
563           Example: stat "/wd" and dump out the data if successful.
564
565              aio_statvfs "/wd", sub {
566                 my $f = $_[0]
567                    or die "statvfs: $!";
568
569                 use Data::Dumper;
570                 say Dumper $f;
571              };
572
573              # result:
574              {
575                 bsize   => 1024,
576                 bfree   => 4333064312,
577                 blocks  => 10253828096,
578                 files   => 2050765568,
579                 flag    => 4096,
580                 favail  => 2042092649,
581                 bavail  => 4333064312,
582                 ffree   => 2042092649,
583                 namemax => 255,
584                 frsize  => 1024,
585                 fsid    => 1810
586              }
587
588       aio_utime $fh_or_path, $atime, $mtime, $callback->($status)
589           Works like perl's "utime" function (including the special case of
590           $atime and $mtime being undef). Fractional times are supported if
591           the underlying syscalls support them.
592
593           When called with a pathname, uses utimensat(2) or utimes(2) if
594           available, otherwise utime(2). If called on a file descriptor, uses
595           futimens(2) or futimes(2) if available, otherwise returns ENOSYS,
596           so this is not portable.
597
598           Examples:
599
600              # set atime and mtime to current time (basically touch(1)):
601              aio_utime "path", undef, undef;
602              # set atime to current time and mtime to beginning of the epoch:
603              aio_utime "path", time, undef; # undef==0
604
605       aio_chown $fh_or_path, $uid, $gid, $callback->($status)
606           Works like perl's "chown" function, except that "undef" for either
607           $uid or $gid is being interpreted as "do not change" (but -1 can
608           also be used).
609
610           Examples:
611
612              # same as "chown root path" in the shell:
613              aio_chown "path", 0, -1;
614              # same as above:
615              aio_chown "path", 0, undef;
616
617       aio_truncate $fh_or_path, $offset, $callback->($status)
618           Works like truncate(2) or ftruncate(2).
619
620       aio_allocate $fh, $mode, $offset, $len, $callback->($status)
621           Allocates or frees disk space according to the $mode argument. See
622           the linux "fallocate" documentation for details.
623
624           $mode is usually 0 or "IO::AIO::FALLOC_FL_KEEP_SIZE" to allocate
625           space, or "IO::AIO::FALLOC_FL_PUNCH_HOLE |
626           IO::AIO::FALLOC_FL_KEEP_SIZE", to deallocate a file range.
627
628           IO::AIO also supports "FALLOC_FL_COLLAPSE_RANGE", to remove a range
629           (without leaving a hole), "FALLOC_FL_ZERO_RANGE", to zero a range,
630           "FALLOC_FL_INSERT_RANGE" to insert a range and
631           "FALLOC_FL_UNSHARE_RANGE" to unshare shared blocks (see your
632           fallocate(2) manpage).
633
634           The file system block size used by "fallocate" is presumably the
635           "f_bsize" returned by "statvfs", but different filesystems and
636           filetypes can dictate other limitations.
637
638           If "fallocate" isn't available or cannot be emulated (currently no
639           emulation will be attempted), passes "-1" and sets $! to "ENOSYS".
640
641       aio_chmod $fh_or_path, $mode, $callback->($status)
642           Works like perl's "chmod" function.
643
644       aio_unlink $pathname, $callback->($status)
645           Asynchronously unlink (delete) a file and call the callback with
646           the result code.
647
648       aio_mknod $pathname, $mode, $dev, $callback->($status)
649           [EXPERIMENTAL]
650
651           Asynchronously create a device node (or fifo). See mknod(2).
652
653           The only (POSIX-) portable way of calling this function is:
654
655              aio_mknod $pathname, IO::AIO::S_IFIFO | $mode, 0, sub { ...
656
657           See "aio_stat" for info about some potentially helpful extra
658           constants and functions.
659
660       aio_link $srcpath, $dstpath, $callback->($status)
661           Asynchronously create a new link to the existing object at $srcpath
662           at the path $dstpath and call the callback with the result code.
663
664       aio_symlink $srcpath, $dstpath, $callback->($status)
665           Asynchronously create a new symbolic link to the existing object at
666           $srcpath at the path $dstpath and call the callback with the result
667           code.
668
669       aio_readlink $pathname, $callback->($link)
670           Asynchronously read the symlink specified by $path and pass it to
671           the callback. If an error occurs, nothing or undef gets passed to
672           the callback.
673
674       aio_realpath $pathname, $callback->($path)
675           Asynchronously make the path absolute and resolve any symlinks in
676           $path. The resulting path only consists of directories (same as
677           Cwd::realpath).
678
679           This request can be used to get the absolute path of the current
680           working directory by passing it a path of . (a single dot).
681
682       aio_rename $srcpath, $dstpath, $callback->($status)
683           Asynchronously rename the object at $srcpath to $dstpath, just as
684           rename(2) and call the callback with the result code.
685
686           On systems that support the AIO::WD working directory abstraction
687           natively, the case "[$wd, "."]" as $srcpath is specialcased -
688           instead of failing, "rename" is called on the absolute path of $wd.
689
690       aio_rename2 $srcpath, $dstpath, $flags, $callback->($status)
691           Basically a version of "aio_rename" with an additional $flags
692           argument. Calling this with "$flags=0" is the same as calling
693           "aio_rename".
694
695           Non-zero flags are currently only supported on GNU/Linux systems
696           that support renameat2. Other systems fail with "ENOSYS" in this
697           case.
698
699           The following constants are available (missing ones are, as usual
700           0), see renameat2(2) for details:
701
702           "IO::AIO::RENAME_NOREPLACE", "IO::AIO::RENAME_EXCHANGE" and
703           "IO::AIO::RENAME_WHITEOUT".
704
705       aio_mkdir $pathname, $mode, $callback->($status)
706           Asynchronously mkdir (create) a directory and call the callback
707           with the result code. $mode will be modified by the umask at the
708           time the request is executed, so do not change your umask.
709
710       aio_rmdir $pathname, $callback->($status)
711           Asynchronously rmdir (delete) a directory and call the callback
712           with the result code.
713
714           On systems that support the AIO::WD working directory abstraction
715           natively, the case "[$wd, "."]" is specialcased - instead of
716           failing, "rmdir" is called on the absolute path of $wd.
717
718       aio_readdir $pathname, $callback->($entries)
719           Unlike the POSIX call of the same name, "aio_readdir" reads an
720           entire directory (i.e. opendir + readdir + closedir). The entries
721           will not be sorted, and will NOT include the "." and ".." entries.
722
723           The callback is passed a single argument which is either "undef" or
724           an array-ref with the filenames.
725
726       aio_readdirx $pathname, $flags, $callback->($entries, $flags)
727           Quite similar to "aio_readdir", but the $flags argument allows one
728           to tune behaviour and output format. In case of an error, $entries
729           will be "undef".
730
731           The flags are a combination of the following constants, ORed
732           together (the flags will also be passed to the callback, possibly
733           modified):
734
735           IO::AIO::READDIR_DENTS
736               Normally the callback gets an arrayref consisting of names only
737               (as with "aio_readdir"). If this flag is set, then the callback
738               gets an arrayref with "[$name, $type, $inode]" arrayrefs, each
739               describing a single directory entry in more detail:
740
741               $name is the name of the entry.
742
743               $type is one of the "IO::AIO::DT_xxx" constants:
744
745               "IO::AIO::DT_UNKNOWN", "IO::AIO::DT_FIFO", "IO::AIO::DT_CHR",
746               "IO::AIO::DT_DIR", "IO::AIO::DT_BLK", "IO::AIO::DT_REG",
747               "IO::AIO::DT_LNK", "IO::AIO::DT_SOCK", "IO::AIO::DT_WHT".
748
749               "IO::AIO::DT_UNKNOWN" means just that: readdir does not know.
750               If you need to know, you have to run stat yourself. Also, for
751               speed/memory reasons, the $type scalars are read-only: you must
752               not modify them.
753
754               $inode is the inode number (which might not be exact on systems
755               with 64 bit inode numbers and 32 bit perls). This field has
756               unspecified content on systems that do not deliver the inode
757               information.
758
759           IO::AIO::READDIR_DIRS_FIRST
760               When this flag is set, then the names will be returned in an
761               order where likely directories come first, in optimal stat
762               order. This is useful when you need to quickly find
763               directories, or you want to find all directories while avoiding
764               to stat() each entry.
765
766               If the system returns type information in readdir, then this is
767               used to find directories directly. Otherwise, likely
768               directories are names beginning with ".", or otherwise names
769               with no dots, of which names with short names are tried first.
770
771           IO::AIO::READDIR_STAT_ORDER
772               When this flag is set, then the names will be returned in an
773               order suitable for stat()'ing each one. That is, when you plan
774               to stat() most or all files in the given directory, then the
775               returned order will likely be faster.
776
777               If both this flag and "IO::AIO::READDIR_DIRS_FIRST" are
778               specified, then the likely dirs come first, resulting in a less
779               optimal stat order for stat'ing all entries, but likely a more
780               optimal order for finding subdirectories.
781
782           IO::AIO::READDIR_FOUND_UNKNOWN
783               This flag should not be set when calling "aio_readdirx".
784               Instead, it is being set by "aio_readdirx", when any of the
785               $type's found were "IO::AIO::DT_UNKNOWN". The absence of this
786               flag therefore indicates that all $type's are known, which can
787               be used to speed up some algorithms.
788
789       aio_slurp $pathname, $offset, $length, $data, $callback->($status)
790           Opens, reads and closes the given file. The data is put into $data,
791           which is resized as required.
792
793           If $offset is negative, then it is counted from the end of the
794           file.
795
796           If $length is zero, then the remaining length of the file is used.
797           Also, in this case, the same limitations to modifying $data apply
798           as when IO::AIO::mmap is used, i.e. it must only be modified in-
799           place with "substr". If the size of the file is known, specifying a
800           non-zero $length results in a performance advantage.
801
802           This request is similar to the older "aio_load" request, but since
803           it is a single request, it might be more efficient to use.
804
805           Example: load /etc/passwd into $passwd.
806
807              my $passwd;
808              aio_slurp "/etc/passwd", 0, 0, $passwd, sub {
809                 $_[0] >= 0
810                    or die "/etc/passwd: $!\n";
811
812                 printf "/etc/passwd is %d bytes long, and contains:\n", length $passwd;
813                 print $passwd;
814              };
815              IO::AIO::flush;
816
817       aio_load $pathname, $data, $callback->($status)
818           This is a composite request that tries to fully load the given file
819           into memory. Status is the same as with aio_read.
820
821           Using "aio_slurp" might be more efficient, as it is a single
822           request.
823
824       aio_copy $srcpath, $dstpath, $callback->($status)
825           Try to copy the file (directories not supported as either source or
826           destination) from $srcpath to $dstpath and call the callback with a
827           status of 0 (ok) or "-1" (error, see $!).
828
829           Existing destination files will be truncated.
830
831           This is a composite request that creates the destination file with
832           mode 0200 and copies the contents of the source file into it using
833           "aio_sendfile", followed by restoring atime, mtime, access mode and
834           uid/gid, in that order.
835
836           If an error occurs, the partial destination file will be unlinked,
837           if possible, except when setting atime, mtime, access mode and
838           uid/gid, where errors are being ignored.
839
840       aio_move $srcpath, $dstpath, $callback->($status)
841           Try to move the file (directories not supported as either source or
842           destination) from $srcpath to $dstpath and call the callback with a
843           status of 0 (ok) or "-1" (error, see $!).
844
845           This is a composite request that tries to rename(2) the file first;
846           if rename fails with "EXDEV", it copies the file with "aio_copy"
847           and, if that is successful, unlinks the $srcpath.
848
849       aio_scandir $pathname, $maxreq, $callback->($dirs, $nondirs)
850           Scans a directory (similar to "aio_readdir") but additionally tries
851           to efficiently separate the entries of directory $path into two
852           sets of names, directories you can recurse into (directories), and
853           ones you cannot recurse into (everything else, including symlinks
854           to directories).
855
856           "aio_scandir" is a composite request that generates many sub
857           requests.  $maxreq specifies the maximum number of outstanding aio
858           requests that this function generates. If it is "<= 0", then a
859           suitable default will be chosen (currently 4).
860
861           On error, the callback is called without arguments, otherwise it
862           receives two array-refs with path-relative entry names.
863
864           Example:
865
866              aio_scandir $dir, 0, sub {
867                 my ($dirs, $nondirs) = @_;
868                 print "real directories: @$dirs\n";
869                 print "everything else: @$nondirs\n";
870              };
871
872           Implementation notes.
873
874           The "aio_readdir" cannot be avoided, but "stat()"'ing every entry
875           can.
876
877           If readdir returns file type information, then this is used
878           directly to find directories.
879
880           Otherwise, after reading the directory, the modification time, size
881           etc.  of the directory before and after the readdir is checked, and
882           if they match (and isn't the current time), the link count will be
883           used to decide how many entries are directories (if >= 2).
884           Otherwise, no knowledge of the number of subdirectories will be
885           assumed.
886
887           Then entries will be sorted into likely directories a non-initial
888           dot currently) and likely non-directories (see "aio_readdirx").
889           Then every entry plus an appended "/." will be "stat"'ed, likely
890           directories first, in order of their inode numbers. If that
891           succeeds, it assumes that the entry is a directory or a symlink to
892           directory (which will be checked separately). This is often faster
893           than stat'ing the entry itself because filesystems might detect the
894           type of the entry without reading the inode data (e.g. ext2fs
895           filetype feature), even on systems that cannot return the filetype
896           information on readdir.
897
898           If the known number of directories (link count - 2) has been
899           reached, the rest of the entries is assumed to be non-directories.
900
901           This only works with certainty on POSIX (= UNIX) filesystems, which
902           fortunately are the vast majority of filesystems around.
903
904           It will also likely work on non-POSIX filesystems with reduced
905           efficiency as those tend to return 0 or 1 as link counts, which
906           disables the directory counting heuristic.
907
908       aio_rmtree $pathname, $callback->($status)
909           Delete a directory tree starting (and including) $path, return the
910           status of the final "rmdir" only. This is a composite request that
911           uses "aio_scandir" to recurse into and rmdir directories, and
912           unlink everything else.
913
914       aio_fcntl $fh, $cmd, $arg, $callback->($status)
915       aio_ioctl $fh, $request, $buf, $callback->($status)
916           These work just like the "fcntl" and "ioctl" built-in functions,
917           except they execute asynchronously and pass the return value to the
918           callback.
919
920           Both calls can be used for a lot of things, some of which make more
921           sense to run asynchronously in their own thread, while some others
922           make less sense. For example, calls that block waiting for external
923           events, such as locking, will also lock down an I/O thread while it
924           is waiting, which can deadlock the whole I/O system. At the same
925           time, there might be no alternative to using a thread to wait.
926
927           So in general, you should only use these calls for things that do
928           (filesystem) I/O, not for things that wait for other events
929           (network, other processes), although if you are careful and know
930           what you are doing, you still can.
931
932           The following constants are available and can be used for normal
933           "ioctl" and "fcntl" as well (missing ones are, as usual 0):
934
935           "F_DUPFD_CLOEXEC",
936
937           "F_OFD_GETLK", "F_OFD_SETLK", "F_OFD_GETLKW",
938
939           "FIFREEZE", "FITHAW", "FITRIM", "FICLONE", "FICLONERANGE",
940           "FIDEDUPERANGE".
941
942           "F_ADD_SEALS", "F_GET_SEALS", "F_SEAL_SEAL", "F_SEAL_SHRINK",
943           "F_SEAL_GROW" and "F_SEAL_WRITE".
944
945           "FS_IOC_GETFLAGS", "FS_IOC_SETFLAGS", "FS_IOC_GETVERSION",
946           "FS_IOC_SETVERSION", "FS_IOC_FIEMAP".
947
948           "FS_IOC_FSGETXATTR", "FS_IOC_FSSETXATTR",
949           "FS_IOC_SET_ENCRYPTION_POLICY", "FS_IOC_GET_ENCRYPTION_PWSALT",
950           "FS_IOC_GET_ENCRYPTION_POLICY", "FS_KEY_DESCRIPTOR_SIZE".
951
952           "FS_SECRM_FL", "FS_UNRM_FL", "FS_COMPR_FL", "FS_SYNC_FL",
953           "FS_IMMUTABLE_FL", "FS_APPEND_FL", "FS_NODUMP_FL", "FS_NOATIME_FL",
954           "FS_DIRTY_FL", "FS_COMPRBLK_FL", "FS_NOCOMP_FL", "FS_ENCRYPT_FL",
955           "FS_BTREE_FL", "FS_INDEX_FL", "FS_JOURNAL_DATA_FL", "FS_NOTAIL_FL",
956           "FS_DIRSYNC_FL", "FS_TOPDIR_FL", "FS_FL_USER_MODIFIABLE".
957
958           "FS_XFLAG_REALTIME", "FS_XFLAG_PREALLOC", "FS_XFLAG_IMMUTABLE",
959           "FS_XFLAG_APPEND", "FS_XFLAG_SYNC", "FS_XFLAG_NOATIME",
960           "FS_XFLAG_NODUMP", "FS_XFLAG_RTINHERIT", "FS_XFLAG_PROJINHERIT",
961           "FS_XFLAG_NOSYMLINKS", "FS_XFLAG_EXTSIZE", "FS_XFLAG_EXTSZINHERIT",
962           "FS_XFLAG_NODEFRAG", "FS_XFLAG_FILESTREAM", "FS_XFLAG_DAX",
963           "FS_XFLAG_HASATTR",
964
965           "BLKROSET", "BLKROGET", "BLKRRPART", "BLKGETSIZE", "BLKFLSBUF",
966           "BLKRASET", "BLKRAGET", "BLKFRASET", "BLKFRAGET", "BLKSECTSET",
967           "BLKSECTGET", "BLKSSZGET", "BLKBSZGET", "BLKBSZSET",
968           "BLKGETSIZE64",
969
970       aio_sync $callback->($status)
971           Asynchronously call sync and call the callback when finished.
972
973       aio_fsync $fh, $callback->($status)
974           Asynchronously call fsync on the given filehandle and call the
975           callback with the fsync result code.
976
977       aio_fdatasync $fh, $callback->($status)
978           Asynchronously call fdatasync on the given filehandle and call the
979           callback with the fdatasync result code.
980
981           If this call isn't available because your OS lacks it or it
982           couldn't be detected, it will be emulated by calling "fsync"
983           instead.
984
985       aio_syncfs $fh, $callback->($status)
986           Asynchronously call the syncfs syscall to sync the filesystem
987           associated to the given filehandle and call the callback with the
988           syncfs result code. If syncfs is not available, calls sync(), but
989           returns "-1" and sets errno to "ENOSYS" nevertheless.
990
991       aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status)
992           Sync the data portion of the file specified by $offset and $length
993           to disk (but NOT the metadata), by calling the Linux-specific
994           sync_file_range call. If sync_file_range is not available or it
995           returns ENOSYS, then fdatasync or fsync is being substituted.
996
997           $flags can be a combination of
998           "IO::AIO::SYNC_FILE_RANGE_WAIT_BEFORE",
999           "IO::AIO::SYNC_FILE_RANGE_WRITE" and
1000           "IO::AIO::SYNC_FILE_RANGE_WAIT_AFTER": refer to the sync_file_range
1001           manpage for details.
1002
1003       aio_pathsync $pathname, $callback->($status)
1004           This request tries to open, fsync and close the given path. This is
1005           a composite request intended to sync directories after directory
1006           operations (E.g. rename). This might not work on all operating
1007           systems or have any specific effect, but usually it makes sure that
1008           directory changes get written to disc. It works for anything that
1009           can be opened for read-only, not just directories.
1010
1011           Future versions of this function might fall back to other methods
1012           when "fsync" on the directory fails (such as calling "sync").
1013
1014           Passes 0 when everything went ok, and "-1" on error.
1015
1016       aio_msync $scalar, $offset = 0, $length = undef, flags = MS_SYNC,
1017       $callback->($status)
1018           This is a rather advanced IO::AIO call, which only works on
1019           mmap(2)ed scalars (see the "IO::AIO::mmap" function, although it
1020           also works on data scalars managed by the Sys::Mmap or Mmap
1021           modules, note that the scalar must only be modified in-place while
1022           an aio operation is pending on it).
1023
1024           It calls the "msync" function of your OS, if available, with the
1025           memory area starting at $offset in the string and ending $length
1026           bytes later. If $length is negative, counts from the end, and if
1027           $length is "undef", then it goes till the end of the string. The
1028           flags can be either "IO::AIO::MS_ASYNC" or "IO::AIO::MS_SYNC", plus
1029           an optional "IO::AIO::MS_INVALIDATE".
1030
1031       aio_mtouch $scalar, $offset = 0, $length = undef, flags = 0,
1032       $callback->($status)
1033           This is a rather advanced IO::AIO call, which works best on
1034           mmap(2)ed scalars.
1035
1036           It touches (reads or writes) all memory pages in the specified
1037           range inside the scalar. All caveats and parameters are the same as
1038           for "aio_msync", above, except for flags, which must be either 0
1039           (which reads all pages and ensures they are instantiated) or
1040           "IO::AIO::MT_MODIFY", which modifies the memory pages (by reading
1041           and writing an octet from it, which dirties the page).
1042
1043       aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status)
1044           This is a rather advanced IO::AIO call, which works best on
1045           mmap(2)ed scalars.
1046
1047           It reads in all the pages of the underlying storage into memory (if
1048           any) and locks them, so they are not getting swapped/paged out or
1049           removed.
1050
1051           If $length is undefined, then the scalar will be locked till the
1052           end.
1053
1054           On systems that do not implement "mlock", this function returns
1055           "-1" and sets errno to "ENOSYS".
1056
1057           Note that the corresponding "munlock" is synchronous and is
1058           documented under "MISCELLANEOUS FUNCTIONS".
1059
1060           Example: open a file, mmap and mlock it - both will be undone when
1061           $data gets destroyed.
1062
1063              open my $fh, "<", $path or die "$path: $!";
1064              my $data;
1065              IO::AIO::mmap $data, -s $fh, IO::AIO::PROT_READ, IO::AIO::MAP_SHARED, $fh;
1066              aio_mlock $data; # mlock in background
1067
1068       aio_mlockall $flags, $callback->($status)
1069           Calls the "mlockall" function with the given $flags (a combination
1070           of "IO::AIO::MCL_CURRENT", "IO::AIO::MCL_FUTURE" and
1071           "IO::AIO::MCL_ONFAULT").
1072
1073           On systems that do not implement "mlockall", this function returns
1074           "-1" and sets errno to "ENOSYS". Similarly, flag combinations not
1075           supported by the system result in a return value of "-1" with errno
1076           being set to "EINVAL".
1077
1078           Note that the corresponding "munlockall" is synchronous and is
1079           documented under "MISCELLANEOUS FUNCTIONS".
1080
1081           Example: asynchronously lock all current and future pages into
1082           memory.
1083
1084              aio_mlockall IO::AIO::MCL_FUTURE;
1085
1086       aio_fiemap $fh, $start, $length, $flags, $count, $cb->(\@extents)
1087           Queries the extents of the given file (by calling the Linux
1088           "FIEMAP" ioctl, see <http://cvs.schmorp.de/IO-AIO/doc/fiemap.txt>
1089           for details). If the ioctl is not available on your OS, then this
1090           request will fail with "ENOSYS".
1091
1092           $start is the starting offset to query extents for, $length is the
1093           size of the range to query - if it is "undef", then the whole file
1094           will be queried.
1095
1096           $flags is a combination of flags ("IO::AIO::FIEMAP_FLAG_SYNC" or
1097           "IO::AIO::FIEMAP_FLAG_XATTR" - "IO::AIO::FIEMAP_FLAGS_COMPAT" is
1098           also exported), and is normally 0 or "IO::AIO::FIEMAP_FLAG_SYNC" to
1099           query the data portion.
1100
1101           $count is the maximum number of extent records to return. If it is
1102           "undef", then IO::AIO queries all extents of the range. As a very
1103           special case, if it is 0, then the callback receives the number of
1104           extents instead of the extents themselves (which is unreliable, see
1105           below).
1106
1107           If an error occurs, the callback receives no arguments. The special
1108           "errno" value "IO::AIO::EBADR" is available to test for flag
1109           errors.
1110
1111           Otherwise, the callback receives an array reference with extent
1112           structures. Each extent structure is an array reference itself,
1113           with the following members:
1114
1115              [$logical, $physical, $length, $flags]
1116
1117           Flags is any combination of the following flag values (typically
1118           either 0 or "IO::AIO::FIEMAP_EXTENT_LAST" (1)):
1119
1120           "IO::AIO::FIEMAP_EXTENT_LAST", "IO::AIO::FIEMAP_EXTENT_UNKNOWN",
1121           "IO::AIO::FIEMAP_EXTENT_DELALLOC",
1122           "IO::AIO::FIEMAP_EXTENT_ENCODED",
1123           "IO::AIO::FIEMAP_EXTENT_DATA_ENCRYPTED",
1124           "IO::AIO::FIEMAP_EXTENT_NOT_ALIGNED",
1125           "IO::AIO::FIEMAP_EXTENT_DATA_INLINE",
1126           "IO::AIO::FIEMAP_EXTENT_DATA_TAIL",
1127           "IO::AIO::FIEMAP_EXTENT_UNWRITTEN", "IO::AIO::FIEMAP_EXTENT_MERGED"
1128           or "IO::AIO::FIEMAP_EXTENT_SHARED".
1129
1130           At the time of this writing (Linux 3.2), this request is unreliable
1131           unless $count is "undef", as the kernel has all sorts of bugs
1132           preventing it to return all extents of a range for files with a
1133           large number of extents. The code (only) works around all these
1134           issues if $count is "undef".
1135
1136       aio_group $callback->(...)
1137           This is a very special aio request: Instead of doing something, it
1138           is a container for other aio requests, which is useful if you want
1139           to bundle many requests into a single, composite, request with a
1140           definite callback and the ability to cancel the whole request with
1141           its subrequests.
1142
1143           Returns an object of class IO::AIO::GRP. See its documentation
1144           below for more info.
1145
1146           Example:
1147
1148              my $grp = aio_group sub {
1149                 print "all stats done\n";
1150              };
1151
1152              add $grp
1153                 (aio_stat ...),
1154                 (aio_stat ...),
1155                 ...;
1156
1157       aio_nop $callback->()
1158           This is a special request - it does nothing in itself and is only
1159           used for side effects, such as when you want to add a dummy request
1160           to a group so that finishing the requests in the group depends on
1161           executing the given code.
1162
1163           While this request does nothing, it still goes through the
1164           execution phase and still requires a worker thread. Thus, the
1165           callback will not be executed immediately but only after other
1166           requests in the queue have entered their execution phase. This can
1167           be used to measure request latency.
1168
1169       IO::AIO::aio_busy $fractional_seconds, $callback->()  *NOT EXPORTED*
1170           Mainly used for debugging and benchmarking, this aio request puts
1171           one of the request workers to sleep for the given time.
1172
1173           While it is theoretically handy to have simple I/O scheduling
1174           requests like sleep and file handle readable/writable, the overhead
1175           this creates is immense (it blocks a thread for a long time) so do
1176           not use this function except to put your application under
1177           artificial I/O pressure.
1178
1179   IO::AIO::WD - multiple working directories
1180       Your process only has one current working directory, which is used by
1181       all threads. This makes it hard to use relative paths (some other
1182       component could call "chdir" at any time, and it is hard to control
1183       when the path will be used by IO::AIO).
1184
1185       One solution for this is to always use absolute paths. This usually
1186       works, but can be quite slow (the kernel has to walk the whole path on
1187       every access), and can also be a hassle to implement.
1188
1189       Newer POSIX systems have a number of functions (openat, fdopendir,
1190       futimensat and so on) that make it possible to specify working
1191       directories per operation.
1192
1193       For portability, and because the clowns who "designed", or shall I
1194       write, perpetrated this new interface were obviously half-drunk, this
1195       abstraction cannot be perfect, though.
1196
1197       IO::AIO allows you to convert directory paths into a so-called
1198       IO::AIO::WD object. This object stores the canonicalised, absolute
1199       version of the path, and on systems that allow it, also a directory
1200       file descriptor.
1201
1202       Everywhere where a pathname is accepted by IO::AIO (e.g. in "aio_stat"
1203       or "aio_unlink"), one can specify an array reference with an
1204       IO::AIO::WD object and a pathname instead (or the IO::AIO::WD object
1205       alone, which gets interpreted as "[$wd, "."]"). If the pathname is
1206       absolute, the IO::AIO::WD object is ignored, otherwise the pathname is
1207       resolved relative to that IO::AIO::WD object.
1208
1209       For example, to get a wd object for /etc and then stat passwd inside,
1210       you would write:
1211
1212          aio_wd "/etc", sub {
1213             my $etcdir = shift;
1214
1215             # although $etcdir can be undef on error, there is generally no reason
1216             # to check for errors here, as aio_stat will fail with ENOENT
1217             # when $etcdir is undef.
1218
1219             aio_stat [$etcdir, "passwd"], sub {
1220                # yay
1221             };
1222          };
1223
1224       The fact that "aio_wd" is a request and not a normal function shows
1225       that creating an IO::AIO::WD object is itself a potentially blocking
1226       operation, which is why it is done asynchronously.
1227
1228       To stat the directory obtained with "aio_wd" above, one could write
1229       either of the following three request calls:
1230
1231          aio_lstat "/etc"    , sub { ...  # pathname as normal string
1232          aio_lstat [$wd, "."], sub { ...  # "." relative to $wd (i.e. $wd itself)
1233          aio_lstat $wd       , sub { ...  # shorthand for the previous
1234
1235       As with normal pathnames, IO::AIO keeps a copy of the working directory
1236       object and the pathname string, so you could write the following
1237       without causing any issues due to $path getting reused:
1238
1239          my $path = [$wd, undef];
1240
1241          for my $name (qw(abc def ghi)) {
1242             $path->[1] = $name;
1243             aio_stat $path, sub {
1244                # ...
1245             };
1246          }
1247
1248       There are some caveats: when directories get renamed (or deleted), the
1249       pathname string doesn't change, so will point to the new directory (or
1250       nowhere at all), while the directory fd, if available on the system,
1251       will still point to the original directory. Most functions accepting a
1252       pathname will use the directory fd on newer systems, and the string on
1253       older systems. Some functions (such as "aio_realpath") will always rely
1254       on the string form of the pathname.
1255
1256       So this functionality is mainly useful to get some protection against
1257       "chdir", to easily get an absolute path out of a relative path for
1258       future reference, and to speed up doing many operations in the same
1259       directory (e.g. when stat'ing all files in a directory).
1260
1261       The following functions implement this working directory abstraction:
1262
1263       aio_wd $pathname, $callback->($wd)
1264           Asynchonously canonicalise the given pathname and convert it to an
1265           IO::AIO::WD object representing it. If possible and supported on
1266           the system, also open a directory fd to speed up pathname
1267           resolution relative to this working directory.
1268
1269           If something goes wrong, then "undef" is passwd to the callback
1270           instead of a working directory object and $! is set appropriately.
1271           Since passing "undef" as working directory component of a pathname
1272           fails the request with "ENOENT", there is often no need for error
1273           checking in the "aio_wd" callback, as future requests using the
1274           value will fail in the expected way.
1275
1276       IO::AIO::CWD
1277           This is a compile time constant (object) that represents the
1278           process current working directory.
1279
1280           Specifying this object as working directory object for a pathname
1281           is as if the pathname would be specified directly, without a
1282           directory object. For example, these calls are functionally
1283           identical:
1284
1285              aio_stat "somefile", sub { ... };
1286              aio_stat [IO::AIO::CWD, "somefile"], sub { ... };
1287
1288       To recover the path associated with an IO::AIO::WD object, you can use
1289       "aio_realpath":
1290
1291          aio_realpath $wd, sub {
1292             warn "path is $_[0]\n";
1293          };
1294
1295       Currently, "aio_statvfs" always, and "aio_rename" and "aio_rmdir"
1296       sometimes, fall back to using an absolue path.
1297
1298   IO::AIO::REQ CLASS
1299       All non-aggregate "aio_*" functions return an object of this class when
1300       called in non-void context.
1301
1302       cancel $req
1303           Cancels the request, if possible. Has the effect of skipping
1304           execution when entering the execute state and skipping calling the
1305           callback when entering the the result state, but will leave the
1306           request otherwise untouched (with the exception of readdir). That
1307           means that requests that currently execute will not be stopped and
1308           resources held by the request will not be freed prematurely.
1309
1310       cb $req $callback->(...)
1311           Replace (or simply set) the callback registered to the request.
1312
1313   IO::AIO::GRP CLASS
1314       This class is a subclass of IO::AIO::REQ, so all its methods apply to
1315       objects of this class, too.
1316
1317       A IO::AIO::GRP object is a special request that can contain multiple
1318       other aio requests.
1319
1320       You create one by calling the "aio_group" constructing function with a
1321       callback that will be called when all contained requests have entered
1322       the "done" state:
1323
1324          my $grp = aio_group sub {
1325             print "all requests are done\n";
1326          };
1327
1328       You add requests by calling the "add" method with one or more
1329       "IO::AIO::REQ" objects:
1330
1331          $grp->add (aio_unlink "...");
1332
1333          add $grp aio_stat "...", sub {
1334             $_[0] or return $grp->result ("error");
1335
1336             # add another request dynamically, if first succeeded
1337             add $grp aio_open "...", sub {
1338                $grp->result ("ok");
1339             };
1340          };
1341
1342       This makes it very easy to create composite requests (see the source of
1343       "aio_move" for an application) that work and feel like simple requests.
1344
1345       •   The IO::AIO::GRP objects will be cleaned up during calls to
1346           "IO::AIO::poll_cb", just like any other request.
1347
1348       •   They can be canceled like any other request. Canceling will cancel
1349           not only the request itself, but also all requests it contains.
1350
1351       •   They can also can also be added to other IO::AIO::GRP objects.
1352
1353       •   You must not add requests to a group from within the group callback
1354           (or any later time).
1355
1356       Their lifetime, simplified, looks like this: when they are empty, they
1357       will finish very quickly. If they contain only requests that are in the
1358       "done" state, they will also finish. Otherwise they will continue to
1359       exist.
1360
1361       That means after creating a group you have some time to add requests
1362       (precisely before the callback has been invoked, which is only done
1363       within the "poll_cb"). And in the callbacks of those requests, you can
1364       add further requests to the group. And only when all those requests
1365       have finished will the the group itself finish.
1366
1367       add $grp ...
1368       $grp->add (...)
1369           Add one or more requests to the group. Any type of IO::AIO::REQ can
1370           be added, including other groups, as long as you do not create
1371           circular dependencies.
1372
1373           Returns all its arguments.
1374
1375       $grp->cancel_subs
1376           Cancel all subrequests and clears any feeder, but not the group
1377           request itself. Useful when you queued a lot of events but got a
1378           result early.
1379
1380           The group request will finish normally (you cannot add requests to
1381           the group).
1382
1383       $grp->result (...)
1384           Set the result value(s) that will be passed to the group callback
1385           when all subrequests have finished and set the groups errno to the
1386           current value of errno (just like calling "errno" without an error
1387           number). By default, no argument will be passed and errno is zero.
1388
1389       $grp->errno ([$errno])
1390           Sets the group errno value to $errno, or the current value of errno
1391           when the argument is missing.
1392
1393           Every aio request has an associated errno value that is restored
1394           when the callback is invoked. This method lets you change this
1395           value from its default (0).
1396
1397           Calling "result" will also set errno, so make sure you either set
1398           $!  before the call to "result", or call c<errno> after it.
1399
1400       feed $grp $callback->($grp)
1401           Sets a feeder/generator on this group: every group can have an
1402           attached generator that generates requests if idle. The idea behind
1403           this is that, although you could just queue as many requests as you
1404           want in a group, this might starve other requests for a potentially
1405           long time. For example, "aio_scandir" might generate hundreds of
1406           thousands of "aio_stat" requests, delaying any later requests for a
1407           long time.
1408
1409           To avoid this, and allow incremental generation of requests, you
1410           can instead a group and set a feeder on it that generates those
1411           requests. The feed callback will be called whenever there are few
1412           enough (see "limit", below) requests active in the group itself and
1413           is expected to queue more requests.
1414
1415           The feed callback can queue as many requests as it likes (i.e.
1416           "add" does not impose any limits).
1417
1418           If the feed does not queue more requests when called, it will be
1419           automatically removed from the group.
1420
1421           If the feed limit is 0 when this method is called, it will be set
1422           to 2 automatically.
1423
1424           Example:
1425
1426              # stat all files in @files, but only ever use four aio requests concurrently:
1427
1428              my $grp = aio_group sub { print "finished\n" };
1429              limit $grp 4;
1430              feed $grp sub {
1431                 my $file = pop @files
1432                    or return;
1433
1434                 add $grp aio_stat $file, sub { ... };
1435              };
1436
1437       limit $grp $num
1438           Sets the feeder limit for the group: The feeder will be called
1439           whenever the group contains less than this many requests.
1440
1441           Setting the limit to 0 will pause the feeding process.
1442
1443           The default value for the limit is 0, but note that setting a
1444           feeder automatically bumps it up to 2.
1445
1446   SUPPORT FUNCTIONS
1447       EVENT PROCESSING AND EVENT LOOP INTEGRATION
1448
1449       $fileno = IO::AIO::poll_fileno
1450           Return the request result pipe file descriptor. This filehandle
1451           must be polled for reading by some mechanism outside this module
1452           (e.g. EV, Glib, select and so on, see below or the SYNOPSIS). If
1453           the pipe becomes readable you have to call "poll_cb" to check the
1454           results.
1455
1456           See "poll_cb" for an example.
1457
1458       IO::AIO::poll_cb
1459           Process some requests that have reached the result phase (i.e. they
1460           have been executed but the results are not yet reported). You have
1461           to call this "regularly" to finish outstanding requests.
1462
1463           Returns 0 if all events could be processed (or there were no events
1464           to process), or "-1" if it returned earlier for whatever reason.
1465           Returns immediately when no events are outstanding. The amount of
1466           events processed depends on the settings of
1467           "IO::AIO::max_poll_req", "IO::AIO::max_poll_time" and
1468           "IO::AIO::max_outstanding".
1469
1470           If not all requests were processed for whatever reason, the poll
1471           file descriptor will still be ready when "poll_cb" returns, so
1472           normally you don't have to do anything special to have it called
1473           later.
1474
1475           Apart from calling "IO::AIO::poll_cb" when the event filehandle
1476           becomes ready, it can be beneficial to call this function from
1477           loops which submit a lot of requests, to make sure the results get
1478           processed when they become available and not just when the loop is
1479           finished and the event loop takes over again. This function returns
1480           very fast when there are no outstanding requests.
1481
1482           Example: Install an Event watcher that automatically calls
1483           IO::AIO::poll_cb with high priority (more examples can be found in
1484           the SYNOPSIS section, at the top of this document):
1485
1486              Event->io (fd => IO::AIO::poll_fileno,
1487                         poll => 'r', async => 1,
1488                         cb => \&IO::AIO::poll_cb);
1489
1490       IO::AIO::poll_wait
1491           Wait until either at least one request is in the result phase or no
1492           requests are outstanding anymore.
1493
1494           This is useful if you want to synchronously wait for some requests
1495           to become ready, without actually handling them.
1496
1497           See "nreqs" for an example.
1498
1499       IO::AIO::poll
1500           Waits until some requests have been handled.
1501
1502           Returns the number of requests processed, but is otherwise strictly
1503           equivalent to:
1504
1505              IO::AIO::poll_wait, IO::AIO::poll_cb
1506
1507       IO::AIO::flush
1508           Wait till all outstanding AIO requests have been handled.
1509
1510           Strictly equivalent to:
1511
1512              IO::AIO::poll_wait, IO::AIO::poll_cb
1513                 while IO::AIO::nreqs;
1514
1515           This function can be useful at program aborts, to make sure
1516           outstanding I/O has been done ("IO::AIO" uses an "END" block which
1517           already calls this function on normal exits), or when you are
1518           merely using "IO::AIO" for its more advanced functions, rather than
1519           for async I/O, e.g.:
1520
1521              my ($dirs, $nondirs);
1522              IO::AIO::aio_scandir "/tmp", 0, sub { ($dirs, $nondirs) = @_ };
1523              IO::AIO::flush;
1524              # $dirs, $nondirs are now set
1525
1526       IO::AIO::max_poll_reqs $nreqs
1527       IO::AIO::max_poll_time $seconds
1528           These set the maximum number of requests (default 0, meaning
1529           infinity) that are being processed by "IO::AIO::poll_cb" in one
1530           call, respectively the maximum amount of time (default 0, meaning
1531           infinity) spent in "IO::AIO::poll_cb" to process requests (more
1532           correctly the mininum amount of time "poll_cb" is allowed to use).
1533
1534           Setting "max_poll_time" to a non-zero value creates an overhead of
1535           one syscall per request processed, which is not normally a problem
1536           unless your callbacks are really really fast or your OS is really
1537           really slow (I am not mentioning Solaris here). Using
1538           "max_poll_reqs" incurs no overhead.
1539
1540           Setting these is useful if you want to ensure some level of
1541           interactiveness when perl is not fast enough to process all
1542           requests in time.
1543
1544           For interactive programs, values such as 0.01 to 0.1 should be
1545           fine.
1546
1547           Example: Install an Event watcher that automatically calls
1548           IO::AIO::poll_cb with low priority, to ensure that other parts of
1549           the program get the CPU sometimes even under high AIO load.
1550
1551              # try not to spend much more than 0.1s in poll_cb
1552              IO::AIO::max_poll_time 0.1;
1553
1554              # use a low priority so other tasks have priority
1555              Event->io (fd => IO::AIO::poll_fileno,
1556                         poll => 'r', nice => 1,
1557                         cb => &IO::AIO::poll_cb);
1558
1559       CONTROLLING THE NUMBER OF THREADS
1560
1561       IO::AIO::min_parallel $nthreads
1562           Set the minimum number of AIO threads to $nthreads. The current
1563           default is 8, which means eight asynchronous operations can execute
1564           concurrently at any one time (the number of outstanding requests,
1565           however, is unlimited).
1566
1567           IO::AIO starts threads only on demand, when an AIO request is
1568           queued and no free thread exists. Please note that queueing up a
1569           hundred requests can create demand for a hundred threads, even if
1570           it turns out that everything is in the cache and could have been
1571           processed faster by a single thread.
1572
1573           It is recommended to keep the number of threads relatively low, as
1574           some Linux kernel versions will scale negatively with the number of
1575           threads (higher parallelity => MUCH higher latency). With current
1576           Linux 2.6 versions, 4-32 threads should be fine.
1577
1578           Under most circumstances you don't need to call this function, as
1579           the module selects a default that is suitable for low to moderate
1580           load.
1581
1582       IO::AIO::max_parallel $nthreads
1583           Sets the maximum number of AIO threads to $nthreads. If more than
1584           the specified number of threads are currently running, this
1585           function kills them. This function blocks until the limit is
1586           reached.
1587
1588           While $nthreads are zero, aio requests get queued but not executed
1589           until the number of threads has been increased again.
1590
1591           This module automatically runs "max_parallel 0" at program end, to
1592           ensure that all threads are killed and that there are no
1593           outstanding requests.
1594
1595           Under normal circumstances you don't need to call this function.
1596
1597       IO::AIO::max_idle $nthreads
1598           Limit the number of threads (default: 4) that are allowed to idle
1599           (i.e., threads that did not get a request to process within the
1600           idle timeout (default: 10 seconds). That means if a thread becomes
1601           idle while $nthreads other threads are also idle, it will free its
1602           resources and exit.
1603
1604           This is useful when you allow a large number of threads (e.g. 100
1605           or 1000) to allow for extremely high load situations, but want to
1606           free resources under normal circumstances (1000 threads can easily
1607           consume 30MB of RAM).
1608
1609           The default is probably ok in most situations, especially if thread
1610           creation is fast. If thread creation is very slow on your system
1611           you might want to use larger values.
1612
1613       IO::AIO::idle_timeout $seconds
1614           Sets the minimum idle timeout (default 10) after which worker
1615           threads are allowed to exit. SEe "IO::AIO::max_idle".
1616
1617       IO::AIO::max_outstanding $maxreqs
1618           Sets the maximum number of outstanding requests to $nreqs. If you
1619           do queue up more than this number of requests, the next call to
1620           "IO::AIO::poll_cb" (and other functions calling "poll_cb", such as
1621           "IO::AIO::flush" or "IO::AIO::poll") will block until the limit is
1622           no longer exceeded.
1623
1624           In other words, this setting does not enforce a queue limit, but
1625           can be used to make poll functions block if the limit is exceeded.
1626
1627           This is a bad function to use in interactive programs because it
1628           blocks, and a bad way to reduce concurrency because it is inexact.
1629           If you need to issue many requests without being able to call a
1630           poll function on demand, it is better to use an "aio_group"
1631           together with a feed callback.
1632
1633           Its main use is in scripts without an event loop - when you want to
1634           stat a lot of files, you can write something like this:
1635
1636              IO::AIO::max_outstanding 32;
1637
1638              for my $path (...) {
1639                 aio_stat $path , ...;
1640                 IO::AIO::poll_cb;
1641              }
1642
1643              IO::AIO::flush;
1644
1645           The call to "poll_cb" inside the loop will normally return
1646           instantly, allowing the loop to progress, but as soon as more than
1647           32 requests are in-flight, it will block until some requests have
1648           been handled. This keeps the loop from pushing a large number of
1649           "aio_stat" requests onto the queue (which, with many paths to stat,
1650           can use up a lot of memory).
1651
1652           The default value for "max_outstanding" is very large, so there is
1653           no practical limit on the number of outstanding requests.
1654
1655       STATISTICAL INFORMATION
1656
1657       IO::AIO::nreqs
1658           Returns the number of requests currently in the ready, execute or
1659           pending states (i.e. for which their callback has not been invoked
1660           yet).
1661
1662           Example: wait till there are no outstanding requests anymore:
1663
1664              IO::AIO::poll_wait, IO::AIO::poll_cb
1665                 while IO::AIO::nreqs;
1666
1667       IO::AIO::nready
1668           Returns the number of requests currently in the ready state (not
1669           yet executed).
1670
1671       IO::AIO::npending
1672           Returns the number of requests currently in the pending state
1673           (executed, but not yet processed by poll_cb).
1674
1675       SUBSECOND STAT TIME ACCESS
1676
1677       Both "aio_stat"/"aio_lstat" and perl's "stat"/"lstat" functions can
1678       generally find access/modification and change times with subsecond time
1679       accuracy of the system supports it, but perl's built-in functions only
1680       return the integer part.
1681
1682       The following functions return the timestamps of the most recent stat
1683       with subsecond precision on most systems and work both after
1684       "aio_stat"/"aio_lstat" and perl's "stat"/"lstat" calls. Their return
1685       value is only meaningful after a successful "stat"/"lstat" call, or
1686       during/after a successful "aio_stat"/"aio_lstat" callback.
1687
1688       This is similar to the Time::HiRes "stat" functions, but can return
1689       full resolution without rounding and work with standard perl "stat",
1690       alleviating the need to call the special "Time::HiRes" functions, which
1691       do not act like their perl counterparts.
1692
1693       On operating systems or file systems where subsecond time resolution is
1694       not supported or could not be detected, a fractional part of 0 is
1695       returned, so it is always safe to call these functions.
1696
1697       $seconds = IO::AIO::st_atime, IO::AIO::st_mtime, IO::AIO::st_ctime,
1698       IO::AIO::st_btime
1699           Return the access, modication, change or birth time, respectively,
1700           including fractional part. Due to the limited precision of floating
1701           point, the accuracy on most platforms is only a bit better than
1702           milliseconds for times around now - see the nsec function family,
1703           below, for full accuracy.
1704
1705           File birth time is only available when the OS and perl support it
1706           (on FreeBSD and NetBSD at the time of this writing, although
1707           support is adaptive, so if your OS/perl gains support, IO::AIO can
1708           take advantage of it). On systems where it isn't available, 0 is
1709           currently returned, but this might change to "undef" in a future
1710           version.
1711
1712       ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtime
1713           Returns access, modification, change and birth time all in one go,
1714           and maybe more times in the future version.
1715
1716       $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec,
1717       IO::AIO::st_ctimensec, IO::AIO::st_btimensec
1718           Return the fractional access, modifcation, change or birth time, in
1719           nanoseconds, as an integer in the range 0 to 999999999.
1720
1721           Note that no accessors are provided for access, modification and
1722           change times - you need to get those from "stat _" if required
1723           ("int IO::AIO::st_atime" and so on will not generally give you the
1724           correct value).
1725
1726       $seconds = IO::AIO::st_btimesec
1727           The (integral) seconds part of the file birth time, if available.
1728
1729       ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec
1730           Like the functions above, but returns all four times in one go (and
1731           maybe more in future versions).
1732
1733       $counter = IO::AIO::st_gen
1734           Returns the generation counter (in practice this is just a random
1735           number) of the file. This is only available on platforms which have
1736           this member in their "struct stat" (most BSDs at the time of this
1737           writing) and generally only to the root usert. If unsupported, 0 is
1738           returned, but this might change to "undef" in a future version.
1739
1740       Example: print the high resolution modification time of /etc, using
1741       "stat", and "IO::AIO::aio_stat".
1742
1743          if (stat "/etc") {
1744             printf "stat(/etc) mtime: %f\n", IO::AIO::st_mtime;
1745          }
1746
1747          IO::AIO::aio_stat "/etc", sub {
1748             $_[0]
1749                and return;
1750
1751             printf "aio_stat(/etc) mtime: %d.%09d\n", (stat _)[9], IO::AIO::st_mtimensec;
1752          };
1753
1754          IO::AIO::flush;
1755
1756       Output of the awbove on my system, showing reduced and full accuracy:
1757
1758          stat(/etc) mtime: 1534043702.020808
1759          aio_stat(/etc) mtime: 1534043702.020807792
1760
1761       MISCELLANEOUS FUNCTIONS
1762
1763       IO::AIO implements some functions that are useful when you want to use
1764       some "Advanced I/O" function not available to in Perl, without going
1765       the "Asynchronous I/O" route. Many of these have an asynchronous
1766       "aio_*" counterpart.
1767
1768       $retval = IO::AIO::fexecve $fh, $argv, $envp
1769           A more-or-less direct equivalent to the POSIX "fexecve" functions,
1770           which allows you to specify the program to be executed via a file
1771           descriptor (or handle). Returns "-1" and sets errno to "ENOSYS" if
1772           not available.
1773
1774       $retval = IO::AIO::mount $special, $path, $fstype, $flags = 0, $data =
1775       undef
1776           Calls the GNU/Linux mount syscall with the given arguments. All
1777           except $flags are strings, and if $data is "undef", a "NULL" will
1778           be passed.
1779
1780           The following values for $flags are available:
1781
1782           "IO::AIO::MS_RDONLY", "IO::AIO::MS_NOSUID", "IO::AIO::MS_NODEV",
1783           "IO::AIO::MS_NOEXEC", "IO::AIO::MS_SYNCHRONOUS",
1784           "IO::AIO::MS_REMOUNT", "IO::AIO::MS_MANDLOCK",
1785           "IO::AIO::MS_DIRSYNC", "IO::AIO::MS_NOATIME",
1786           "IO::AIO::MS_NODIRATIME", "IO::AIO::MS_BIND", "IO::AIO::MS_MOVE",
1787           "IO::AIO::MS_REC", "IO::AIO::MS_SILENT", "IO::AIO::MS_POSIXACL",
1788           "IO::AIO::MS_UNBINDABLE", "IO::AIO::MS_PRIVATE",
1789           "IO::AIO::MS_SLAVE", "IO::AIO::MS_SHARED", "IO::AIO::MS_RELATIME",
1790           "IO::AIO::MS_KERNMOUNT", "IO::AIO::MS_I_VERSION",
1791           "IO::AIO::MS_STRICTATIME", "IO::AIO::MS_LAZYTIME",
1792           "IO::AIO::MS_ACTIVE", "IO::AIO::MS_NOUSER", "IO::AIO::MS_RMT_MASK",
1793           "IO::AIO::MS_MGC_VAL" and "IO::AIO::MS_MGC_MSK".
1794
1795       $retval = IO::AIO::umount $path, $flags = 0
1796           Invokes the GNU/Linux "umount" or "umount2" syscalls. Always calls
1797           "umount" if $flags is 0, otherwqise always tries to call "umount2".
1798
1799           The following $flags are available:
1800
1801           "IO::AIO::MNT_FORCE", "IO::AIO::MNT_DETACH", "IO::AIO::MNT_EXPIRE"
1802           and "IO::AIO::UMOUNT_NOFOLLOW".
1803
1804       $numfd = IO::AIO::get_fdlimit
1805           Tries to find the current file descriptor limit and returns it, or
1806           "undef" and sets $! in case of an error. The limit is one larger
1807           than the highest valid file descriptor number.
1808
1809       IO::AIO::min_fdlimit [$numfd]
1810           Try to increase the current file descriptor limit(s) to at least
1811           $numfd by changing the soft or hard file descriptor resource limit.
1812           If $numfd is missing, it will try to set a very high limit,
1813           although this is not recommended when you know the actual minimum
1814           that you require.
1815
1816           If the limit cannot be raised enough, the function makes a best-
1817           effort attempt to increase the limit as much as possible, using
1818           various tricks, while still failing. You can query the resulting
1819           limit using "IO::AIO::get_fdlimit".
1820
1821           If an error occurs, returns "undef" and sets $!, otherwise returns
1822           true.
1823
1824       IO::AIO::sendfile $ofh, $ifh, $offset, $count
1825           Calls the "eio_sendfile_sync" function, which is like
1826           "aio_sendfile", but is blocking (this makes most sense if you know
1827           the input data is likely cached already and the output filehandle
1828           is set to non-blocking operations).
1829
1830           Returns the number of bytes copied, or "-1" on error.
1831
1832       IO::AIO::fadvise $fh, $offset, $len, $advice
1833           Simply calls the "posix_fadvise" function (see its manpage for
1834           details). The following advice constants are available:
1835           "IO::AIO::FADV_NORMAL", "IO::AIO::FADV_SEQUENTIAL",
1836           "IO::AIO::FADV_RANDOM", "IO::AIO::FADV_NOREUSE",
1837           "IO::AIO::FADV_WILLNEED", "IO::AIO::FADV_DONTNEED".
1838
1839           On systems that do not implement "posix_fadvise", this function
1840           returns ENOSYS, otherwise the return value of "posix_fadvise".
1841
1842       IO::AIO::madvise $scalar, $offset, $len, $advice
1843           Simply calls the "posix_madvise" function (see its manpage for
1844           details). The following advice constants are available:
1845           "IO::AIO::MADV_NORMAL", "IO::AIO::MADV_SEQUENTIAL",
1846           "IO::AIO::MADV_RANDOM", "IO::AIO::MADV_WILLNEED",
1847           "IO::AIO::MADV_DONTNEED".
1848
1849           If $offset is negative, counts from the end. If $length is
1850           negative, the remaining length of the $scalar is used. If possible,
1851           $length will be reduced to fit into the $scalar.
1852
1853           On systems that do not implement "posix_madvise", this function
1854           returns ENOSYS, otherwise the return value of "posix_madvise".
1855
1856       IO::AIO::mprotect $scalar, $offset, $len, $protect
1857           Simply calls the "mprotect" function on the preferably AIO::mmap'ed
1858           $scalar (see its manpage for details). The following protect
1859           constants are available: "IO::AIO::PROT_NONE",
1860           "IO::AIO::PROT_READ", "IO::AIO::PROT_WRITE", "IO::AIO::PROT_EXEC".
1861
1862           If $offset is negative, counts from the end. If $length is
1863           negative, the remaining length of the $scalar is used. If possible,
1864           $length will be reduced to fit into the $scalar.
1865
1866           On systems that do not implement "mprotect", this function returns
1867           ENOSYS, otherwise the return value of "mprotect".
1868
1869       IO::AIO::mmap $scalar, $length, $prot, $flags, $fh[, $offset]
1870           Memory-maps a file (or anonymous memory range) and attaches it to
1871           the given $scalar, which will act like a string scalar. Returns
1872           true on success, and false otherwise.
1873
1874           The scalar must exist, but its contents do not matter - this means
1875           you cannot use a nonexistant array or hash element. When in doubt,
1876           "undef" the scalar first.
1877
1878           The only operations allowed on the mmapped scalar are
1879           "substr"/"vec", which don't change the string length, and most
1880           read-only operations such as copying it or searching it with
1881           regexes and so on.
1882
1883           Anything else is unsafe and will, at best, result in memory leaks.
1884
1885           The memory map associated with the $scalar is automatically removed
1886           when the $scalar is undef'd or destroyed, or when the
1887           "IO::AIO::mmap" or "IO::AIO::munmap" functions are called on it.
1888
1889           This calls the "mmap"(2) function internally. See your system's
1890           manual page for details on the $length, $prot and $flags
1891           parameters.
1892
1893           The $length must be larger than zero and smaller than the actual
1894           filesize.
1895
1896           $prot is a combination of "IO::AIO::PROT_NONE",
1897           "IO::AIO::PROT_EXEC", "IO::AIO::PROT_READ" and/or
1898           "IO::AIO::PROT_WRITE",
1899
1900           $flags can be a combination of "IO::AIO::MAP_SHARED" or
1901           "IO::AIO::MAP_PRIVATE", or a number of system-specific flags (when
1902           not available, the are 0): "IO::AIO::MAP_ANONYMOUS" (which is set
1903           to "MAP_ANON" if your system only provides this constant),
1904           "IO::AIO::MAP_LOCKED", "IO::AIO::MAP_NORESERVE",
1905           "IO::AIO::MAP_POPULATE", "IO::AIO::MAP_NONBLOCK",
1906           "IO::AIO::MAP_FIXED", "IO::AIO::MAP_GROWSDOWN",
1907           "IO::AIO::MAP_32BIT", "IO::AIO::MAP_HUGETLB", "IO::AIO::MAP_STACK",
1908           "IO::AIO::MAP_FIXED_NOREPLACE", "IO::AIO::MAP_SHARED_VALIDATE",
1909           "IO::AIO::MAP_SYNC" or "IO::AIO::MAP_UNINITIALIZED".
1910
1911           If $fh is "undef", then a file descriptor of "-1" is passed.
1912
1913           $offset is the offset from the start of the file - it generally
1914           must be a multiple of "IO::AIO::PAGESIZE" and defaults to 0.
1915
1916           Example:
1917
1918              use Digest::MD5;
1919              use IO::AIO;
1920
1921              open my $fh, "<verybigfile"
1922                 or die "$!";
1923
1924              IO::AIO::mmap my $data, -s $fh, IO::AIO::PROT_READ, IO::AIO::MAP_SHARED, $fh
1925                 or die "verybigfile: $!";
1926
1927              my $fast_md5 = md5 $data;
1928
1929       IO::AIO::munmap $scalar
1930           Removes a previous mmap and undefines the $scalar.
1931
1932       IO::AIO::mremap $scalar, $new_length, $flags = MREMAP_MAYMOVE[,
1933       $new_address = 0]
1934           Calls the Linux-specific mremap(2) system call. The $scalar must
1935           have been mapped by "IO::AIO::mmap", and $flags must currently
1936           either be 0 or "IO::AIO::MREMAP_MAYMOVE".
1937
1938           Returns true if successful, and false otherwise. If the underlying
1939           mmapped region has changed address, then the true value has the
1940           numerical value 1, otherwise it has the numerical value 0:
1941
1942              my $success = IO::AIO::mremap $mmapped, 8192, IO::AIO::MREMAP_MAYMOVE
1943                 or die "mremap: $!";
1944
1945              if ($success*1) {
1946                 warn "scalar has chanegd address in memory\n";
1947              }
1948
1949           "IO::AIO::MREMAP_FIXED" and the $new_address argument are currently
1950           implemented, but not supported and might go away in a future
1951           version.
1952
1953           On systems where this call is not supported or is not emulated,
1954           this call returns falls and sets $! to "ENOSYS".
1955
1956       IO::AIO::mlockall $flags
1957           Calls the "eio_mlockall_sync" function, which is like
1958           "aio_mlockall", but is blocking.
1959
1960       IO::AIO::munlock $scalar, $offset = 0, $length = undef
1961           Calls the "munlock" function, undoing the effects of a previous
1962           "aio_mlock" call (see its description for details).
1963
1964       IO::AIO::munlockall
1965           Calls the "munlockall" function.
1966
1967           On systems that do not implement "munlockall", this function
1968           returns ENOSYS, otherwise the return value of "munlockall".
1969
1970       $fh = IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_maxlen, $flags
1971           Uses the GNU/Linux accept4(2) syscall, if available, to accept a
1972           socket and return the new file handle on success, or sets $! and
1973           returns "undef" on error.
1974
1975           The remote name of the new socket will be stored in $sockaddr,
1976           which will be extended to allow for at least $sockaddr_maxlen
1977           octets. If the socket name does not fit into $sockaddr_maxlen
1978           octets, this is signaled by returning a longer string in $sockaddr,
1979           which might or might not be truncated.
1980
1981           To accept name-less sockets, use "undef" for $sockaddr and 0 for
1982           $sockaddr_maxlen.
1983
1984           The main reasons to use this syscall rather than portable accept(2)
1985           are that you can specify "SOCK_NONBLOCK" and/or "SOCK_CLOEXEC"
1986           flags and you can accept name-less sockets by specifying 0 for
1987           $sockaddr_maxlen, which is sadly not possible with perl's interface
1988           to "accept".
1989
1990       IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags
1991           Calls the GNU/Linux splice(2) syscall, if available. If $r_off or
1992           $w_off are "undef", then "NULL" is passed for these, otherwise they
1993           should be the file offset.
1994
1995           $r_fh and $w_fh should not refer to the same file, as splice might
1996           silently corrupt the data in this case.
1997
1998           The following symbol flag values are available:
1999           "IO::AIO::SPLICE_F_MOVE", "IO::AIO::SPLICE_F_NONBLOCK",
2000           "IO::AIO::SPLICE_F_MORE" and "IO::AIO::SPLICE_F_GIFT".
2001
2002           See the splice(2) manpage for details.
2003
2004       IO::AIO::tee $r_fh, $w_fh, $length, $flags
2005           Calls the GNU/Linux tee(2) syscall, see its manpage and the
2006           description for "IO::AIO::splice" above for details.
2007
2008       $actual_size = IO::AIO::pipesize $r_fh[, $new_size]
2009           Attempts to query or change the pipe buffer size. Obviously works
2010           only on pipes, and currently works only on GNU/Linux systems, and
2011           fails with "-1"/"ENOSYS" everywhere else. If anybody knows how to
2012           influence pipe buffer size on other systems, drop me a note.
2013
2014       ($rfh, $wfh) = IO::AIO::pipe2 [$flags]
2015           This is a direct interface to the Linux pipe2(2) system call. If
2016           $flags is missing or 0, then this should be the same as a call to
2017           perl's built-in "pipe" function and create a new pipe, and works on
2018           systems that lack the pipe2 syscall. On win32, this case invokes
2019           "_pipe (..., 4096, O_BINARY)".
2020
2021           If $flags is non-zero, it tries to invoke the pipe2 system call
2022           with the given flags (Linux 2.6.27, glibc 2.9).
2023
2024           On success, the read and write file handles are returned.
2025
2026           On error, nothing will be returned. If the pipe2 syscall is missing
2027           and $flags is non-zero, fails with "ENOSYS".
2028
2029           Please refer to pipe2(2) for more info on the $flags, but at the
2030           time of this writing, "IO::AIO::O_CLOEXEC", "IO::AIO::O_NONBLOCK"
2031           and "IO::AIO::O_DIRECT" (Linux 3.4, for packet-based pipes) were
2032           supported.
2033
2034           Example: create a pipe race-free w.r.t. threads and fork:
2035
2036              my ($rfh, $wfh) = IO::AIO::pipe2 IO::AIO::O_CLOEXEC
2037                 or die "pipe2: $!\n";
2038
2039       $fh = IO::AIO::memfd_create $pathname[, $flags]
2040           This is a direct interface to the Linux memfd_create(2) system
2041           call. The (unhelpful) default for $flags is 0, but your default
2042           should be "IO::AIO::MFD_CLOEXEC".
2043
2044           On success, the new memfd filehandle is returned, otherwise returns
2045           "undef". If the memfd_create syscall is missing, fails with
2046           "ENOSYS".
2047
2048           Please refer to memfd_create(2) for more info on this call.
2049
2050           The following $flags values are available: "IO::AIO::MFD_CLOEXEC",
2051           "IO::AIO::MFD_ALLOW_SEALING", "IO::AIO::MFD_HUGETLB",
2052           "IO::AIO::MFD_HUGETLB_2MB" and "IO::AIO::MFD_HUGETLB_1GB".
2053
2054           Example: create a new memfd.
2055
2056              my $fh = IO::AIO::memfd_create "somenameforprocfd", IO::AIO::MFD_CLOEXEC
2057                 or die "memfd_create: $!\n";
2058
2059       $fh = IO::AIO::pidfd_open $pid[, $flags]
2060           This is an interface to the Linux pidfd_open(2) system call. The
2061           default for $flags is 0.
2062
2063           On success, a new pidfd filehandle is returned (that is already set
2064           to close-on-exec), otherwise returns "undef". If the syscall is
2065           missing, fails with "ENOSYS".
2066
2067           Example: open pid 6341 as pidfd.
2068
2069              my $fh = IO::AIO::pidfd_open 6341
2070                 or die "pidfd_open: $!\n";
2071
2072       $status = IO::AIO::pidfd_send_signal $pidfh, $signal[, $siginfo[,
2073       $flags]]
2074           This is an interface to the Linux pidfd_send_signal system call.
2075           The default for $siginfo is "undef" and the default for $flags is
2076           0.
2077
2078           Returns the system call status.  If the syscall is missing, fails
2079           with "ENOSYS".
2080
2081           When specified, $siginfo must be a reference to a hash with one or
2082           more of the following members:
2083
2084           code - the "si_code" member
2085           pid - the "si_pid" member
2086           uid - the "si_uid" member
2087           value_int - the "si_value.sival_int" member
2088           value_ptr - the "si_value.sival_ptr" member, specified as an
2089           integer
2090
2091           Example: send a SIGKILL to the specified process.
2092
2093              my $status = IO::AIO::pidfd_send_signal $pidfh, 9, undef
2094                 and die "pidfd_send_signal: $!\n";
2095
2096           Example: send a SIGKILL to the specified process with extra data.
2097
2098              my $status = IO::AIO::pidfd_send_signal $pidfh, 9,  { code => -1, value_int => 7 }
2099                 and die "pidfd_send_signal: $!\n";
2100
2101       $fh = IO::AIO::pidfd_getfd $pidfh, $targetfd[, $flags]
2102           This is an interface to the Linux pidfd_getfd system call. The
2103           default for $flags is 0.
2104
2105           On success, returns a dup'ed copy of the target file descriptor
2106           (specified as an integer) returned (that is already set to close-
2107           on-exec), otherwise returns "undef". If the syscall is missing,
2108           fails with "ENOSYS".
2109
2110           Example: get a copy of standard error of another process and print
2111           soemthing to it.
2112
2113              my $errfh = IO::AIO::pidfd_getfd $pidfh, 2
2114                 or die "pidfd_getfd: $!\n";
2115              print $errfh "stderr\n";
2116
2117       $fh = IO::AIO::eventfd [$initval, [$flags]]
2118           This is a direct interface to the Linux eventfd(2) system call. The
2119           (unhelpful) defaults for $initval and $flags are 0 for both.
2120
2121           On success, the new eventfd filehandle is returned, otherwise
2122           returns "undef". If the eventfd syscall is missing, fails with
2123           "ENOSYS".
2124
2125           Please refer to eventfd(2) for more info on this call.
2126
2127           The following symbol flag values are available:
2128           "IO::AIO::EFD_CLOEXEC", "IO::AIO::EFD_NONBLOCK" and
2129           "IO::AIO::EFD_SEMAPHORE" (Linux 2.6.30).
2130
2131           Example: create a new eventfd filehandle:
2132
2133              $fh = IO::AIO::eventfd 0, IO::AIO::EFD_CLOEXEC
2134                 or die "eventfd: $!\n";
2135
2136       $fh = IO::AIO::timerfd_create $clockid[, $flags]
2137           This is a direct interface to the Linux timerfd_create(2) system
2138           call. The (unhelpful) default for $flags is 0, but your default
2139           should be "IO::AIO::TFD_CLOEXEC".
2140
2141           On success, the new timerfd filehandle is returned, otherwise
2142           returns "undef". If the timerfd_create syscall is missing, fails
2143           with "ENOSYS".
2144
2145           Please refer to timerfd_create(2) for more info on this call.
2146
2147           The following $clockid values are available:
2148           "IO::AIO::CLOCK_REALTIME", "IO::AIO::CLOCK_MONOTONIC"
2149           "IO::AIO::CLOCK_CLOCK_BOOTTIME" (Linux 3.15)
2150           "IO::AIO::CLOCK_CLOCK_REALTIME_ALARM" (Linux 3.11) and
2151           "IO::AIO::CLOCK_CLOCK_BOOTTIME_ALARM" (Linux 3.11).
2152
2153           The following $flags values are available (Linux 2.6.27):
2154           "IO::AIO::TFD_NONBLOCK" and "IO::AIO::TFD_CLOEXEC".
2155
2156           Example: create a new timerfd and set it to one-second repeated
2157           alarms, then wait for two alarms:
2158
2159              my $fh = IO::AIO::timerfd_create IO::AIO::CLOCK_BOOTTIME, IO::AIO::TFD_CLOEXEC
2160                 or die "timerfd_create: $!\n";
2161
2162              defined IO::AIO::timerfd_settime $fh, 0, 1, 1
2163                 or die "timerfd_settime: $!\n";
2164
2165              for (1..2) {
2166                 8 == sysread $fh, my $buf, 8
2167                    or die "timerfd read failure\n";
2168
2169                 printf "number of expirations (likely 1): %d\n",
2170                    unpack "Q", $buf;
2171              }
2172
2173       ($cur_interval, $cur_value) = IO::AIO::timerfd_settime $fh, $flags,
2174       $new_interval, $nbw_value
2175           This is a direct interface to the Linux timerfd_settime(2) system
2176           call. Please refer to its manpage for more info on this call.
2177
2178           The new itimerspec is specified using two (possibly fractional)
2179           second values, $new_interval and $new_value).
2180
2181           On success, the current interval and value are returned (as per
2182           "timerfd_gettime"). On failure, the empty list is returned.
2183
2184           The following $flags values are available:
2185           "IO::AIO::TFD_TIMER_ABSTIME" and
2186           "IO::AIO::TFD_TIMER_CANCEL_ON_SET".
2187
2188           See "IO::AIO::timerfd_create" for a full example.
2189
2190       ($cur_interval, $cur_value) = IO::AIO::timerfd_gettime $fh
2191           This is a direct interface to the Linux timerfd_gettime(2) system
2192           call. Please refer to its manpage for more info on this call.
2193
2194           On success, returns the current values of interval and value for
2195           the given timerfd (as potentially fractional second values). On
2196           failure, the empty list is returned.
2197

EVENT LOOP INTEGRATION

2199       It is recommended to use AnyEvent::AIO to integrate IO::AIO
2200       automatically into many event loops:
2201
2202        # AnyEvent integration (EV, Event, Glib, Tk, POE, urxvt, pureperl...)
2203        use AnyEvent::AIO;
2204
2205       You can also integrate IO::AIO manually into many event loops, here are
2206       some examples of how to do this:
2207
2208        # EV integration
2209        my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb;
2210
2211        # Event integration
2212        Event->io (fd => IO::AIO::poll_fileno,
2213                   poll => 'r',
2214                   cb => \&IO::AIO::poll_cb);
2215
2216        # Glib/Gtk2 integration
2217        add_watch Glib::IO IO::AIO::poll_fileno,
2218                  in => sub { IO::AIO::poll_cb; 1 };
2219
2220        # Tk integration
2221        Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "",
2222                                  readable => \&IO::AIO::poll_cb);
2223
2224        # Danga::Socket integration
2225        Danga::Socket->AddOtherFds (IO::AIO::poll_fileno =>
2226                                    \&IO::AIO::poll_cb);
2227
2228   FORK BEHAVIOUR
2229       Usage of pthreads in a program changes the semantics of fork
2230       considerably. Specifically, only async-safe functions can be called
2231       after fork. Perl doesn't know about this, so in general, you cannot
2232       call fork with defined behaviour in perl if pthreads are involved.
2233       IO::AIO uses pthreads, so this applies, but many other extensions and
2234       (for inexplicable reasons) perl itself often is linked against
2235       pthreads, so this limitation applies to quite a lot of perls.
2236
2237       This module no longer tries to fight your OS, or POSIX. That means
2238       IO::AIO only works in the process that loaded it. Forking is fully
2239       supported, but using IO::AIO in the child is not.
2240
2241       You might get around by not using IO::AIO before (or after) forking.
2242       You could also try to call the IO::AIO::reinit function in the child:
2243
2244       IO::AIO::reinit
2245           Abandons all current requests and I/O threads and simply
2246           reinitialises all data structures. This is not an operation
2247           supported by any standards, but happens to work on GNU/Linux and
2248           some newer BSD systems.
2249
2250           The only reasonable use for this function is to call it after
2251           forking, if "IO::AIO" was used in the parent. Calling it while
2252           IO::AIO is active in the process will result in undefined
2253           behaviour. Calling it at any time will also result in any undefined
2254           (by POSIX) behaviour.
2255
2256   LINUX-SPECIFIC CALLS
2257       When a call is documented as "linux-specific" then this means it
2258       originated on GNU/Linux. "IO::AIO" will usually try to autodetect the
2259       availability and compatibility of such calls regardless of the platform
2260       it is compiled on, so platforms such as FreeBSD which often implement
2261       these calls will work. When in doubt, call them and see if they fail
2262       wth "ENOSYS".
2263
2264   MEMORY USAGE
2265       Per-request usage:
2266
2267       Each aio request uses - depending on your architecture - around 100-200
2268       bytes of memory. In addition, stat requests need a stat buffer
2269       (possibly a few hundred bytes), readdir requires a result buffer and so
2270       on. Perl scalars and other data passed into aio requests will also be
2271       locked and will consume memory till the request has entered the done
2272       state.
2273
2274       This is not awfully much, so queuing lots of requests is not usually a
2275       problem.
2276
2277       Per-thread usage:
2278
2279       In the execution phase, some aio requests require more memory for
2280       temporary buffers, and each thread requires a stack and other data
2281       structures (usually around 16k-128k, depending on the OS).
2282

KNOWN BUGS

2284       Known bugs will be fixed in the next release :)
2285

KNOWN ISSUES

2287       Calls that try to "import" foreign memory areas (such as
2288       "IO::AIO::mmap" or "IO::AIO::aio_slurp") do not work with generic
2289       lvalues, such as non-created hash slots or other scalars I didn't think
2290       of. It's best to avoid such and either use scalar variables or making
2291       sure that the scalar exists (e.g. by storing "undef") and isn't "funny"
2292       (e.g. tied).
2293
2294       I am not sure anything can be done about this, so this is considered a
2295       known issue, rather than a bug.
2296

SEE ALSO

2298       AnyEvent::AIO for easy integration into event loops, Coro::AIO for a
2299       more natural syntax and IO::FDPass for file descriptor passing.
2300

AUTHOR

2302        Marc Lehmann <schmorp@schmorp.de>
2303        http://home.schmorp.de/
2304
2305
2306
2307perl v5.36.0                      2022-09-26                            AIO(3)
Impressum