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

EVENT LOOP INTEGRATION

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

KNOWN BUGS

2278       Known bugs will be fixed in the next release :)
2279

KNOWN ISSUES

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

SEE ALSO

2292       AnyEvent::AIO for easy integration into event loops, Coro::AIO for a
2293       more natural syntax and IO::FDPass for file descriptor passing.
2294

AUTHOR

2296        Marc Lehmann <schmorp@schmorp.de>
2297        http://home.schmorp.de/
2298
2299
2300
2301perl v5.38.0                      2023-07-20                            AIO(3)
Impressum