ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/README
(Generate patch)

Comparing IO-AIO/README (file contents):
Revision 1.53 by root, Thu Oct 11 03:20:52 2012 UTC vs.
Revision 1.56 by root, Wed Feb 11 19:32:36 2015 UTC

64 64
65 EXAMPLE 65 EXAMPLE
66 This is a simple example that uses the EV module and loads /etc/passwd 66 This is a simple example that uses the EV module and loads /etc/passwd
67 asynchronously: 67 asynchronously:
68 68
69 use Fcntl;
70 use EV; 69 use EV;
71 use IO::AIO; 70 use IO::AIO;
72 71
73 # register the IO::AIO callback with EV 72 # register the IO::AIO callback with EV
74 my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb; 73 my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb;
172 aio_unlink $pathname, $callback->($status) 171 aio_unlink $pathname, $callback->($status)
173 aio_mknod $pathname, $mode, $dev, $callback->($status) 172 aio_mknod $pathname, $mode, $dev, $callback->($status)
174 aio_link $srcpath, $dstpath, $callback->($status) 173 aio_link $srcpath, $dstpath, $callback->($status)
175 aio_symlink $srcpath, $dstpath, $callback->($status) 174 aio_symlink $srcpath, $dstpath, $callback->($status)
176 aio_readlink $pathname, $callback->($link) 175 aio_readlink $pathname, $callback->($link)
177 aio_realpath $pathname, $callback->($link) 176 aio_realpath $pathname, $callback->($path)
178 aio_rename $srcpath, $dstpath, $callback->($status) 177 aio_rename $srcpath, $dstpath, $callback->($status)
179 aio_mkdir $pathname, $mode, $callback->($status) 178 aio_mkdir $pathname, $mode, $callback->($status)
180 aio_rmdir $pathname, $callback->($status) 179 aio_rmdir $pathname, $callback->($status)
181 aio_readdir $pathname, $callback->($entries) 180 aio_readdir $pathname, $callback->($entries)
182 aio_readdirx $pathname, $flags, $callback->($entries, $flags) 181 aio_readdirx $pathname, $flags, $callback->($entries, $flags)
530 namemax => 255, 529 namemax => 255,
531 frsize => 1024, 530 frsize => 1024,
532 fsid => 1810 531 fsid => 1810
533 } 532 }
534 533
535 Here is a (likely partial) list of fsid values used by Linux - it is 534 Here is a (likely partial - send me updates!) list of fsid values
536 safe to hardcode these when the $^O is "linux": 535 used by Linux - it is safe to hardcode these when $^O is "linux":
537 536
538 0x0000adf5 adfs 537 0x0000adf5 adfs
539 0x0000adff affs 538 0x0000adff affs
540 0x5346414f afs 539 0x5346414f afs
541 0x09041934 anon-inode filesystem 540 0x09041934 anon-inode filesystem
644 643
645 aio_truncate $fh_or_path, $offset, $callback->($status) 644 aio_truncate $fh_or_path, $offset, $callback->($status)
646 Works like truncate(2) or ftruncate(2). 645 Works like truncate(2) or ftruncate(2).
647 646
648 aio_allocate $fh, $mode, $offset, $len, $callback->($status) 647 aio_allocate $fh, $mode, $offset, $len, $callback->($status)
649 Allocates or freed disk space according to the $mode argument. See 648 Allocates or frees disk space according to the $mode argument. See
650 the linux "fallocate" docuemntation for details. 649 the linux "fallocate" documentation for details.
651 650
652 $mode can currently be 0 or "IO::AIO::FALLOC_FL_KEEP_SIZE" to 651 $mode can currently be 0 or "IO::AIO::FALLOC_FL_KEEP_SIZE" to
653 allocate space, or "IO::AIO::FALLOC_FL_PUNCH_HOLE | 652 allocate space, or "IO::AIO::FALLOC_FL_PUNCH_HOLE |
654 IO::AIO::FALLOC_FL_KEEP_SIZE", to deallocate a file range. 653 IO::AIO::FALLOC_FL_KEEP_SIZE", to deallocate a file range.
655 654
692 the callback. If an error occurs, nothing or undef gets passed to 691 the callback. If an error occurs, nothing or undef gets passed to
693 the callback. 692 the callback.
694 693
695 aio_realpath $pathname, $callback->($path) 694 aio_realpath $pathname, $callback->($path)
696 Asynchronously make the path absolute and resolve any symlinks in 695 Asynchronously make the path absolute and resolve any symlinks in
697 $path. The resulting path only consists of directories (Same as 696 $path. The resulting path only consists of directories (same as
698 Cwd::realpath). 697 Cwd::realpath).
699 698
700 This request can be used to get the absolute path of the current 699 This request can be used to get the absolute path of the current
701 working directory by passing it a path of . (a single dot). 700 working directory by passing it a path of . (a single dot).
702 701
703 aio_rename $srcpath, $dstpath, $callback->($status) 702 aio_rename $srcpath, $dstpath, $callback->($status)
704 Asynchronously rename the object at $srcpath to $dstpath, just as 703 Asynchronously rename the object at $srcpath to $dstpath, just as
705 rename(2) and call the callback with the result code. 704 rename(2) and call the callback with the result code.
705
706 On systems that support the AIO::WD working directory abstraction
707 natively, the case "[$wd, "."]" as $srcpath is specialcased -
708 instead of failing, "rename" is called on the absolute path of $wd.
706 709
707 aio_mkdir $pathname, $mode, $callback->($status) 710 aio_mkdir $pathname, $mode, $callback->($status)
708 Asynchronously mkdir (create) a directory and call the callback with 711 Asynchronously mkdir (create) a directory and call the callback with
709 the result code. $mode will be modified by the umask at the time the 712 the result code. $mode will be modified by the umask at the time the
710 request is executed, so do not change your umask. 713 request is executed, so do not change your umask.
711 714
712 aio_rmdir $pathname, $callback->($status) 715 aio_rmdir $pathname, $callback->($status)
713 Asynchronously rmdir (delete) a directory and call the callback with 716 Asynchronously rmdir (delete) a directory and call the callback with
714 the result code. 717 the result code.
718
719 On systems that support the AIO::WD working directory abstraction
720 natively, the case "[$wd, "."]" is specialcased - instead of
721 failing, "rmdir" is called on the absolute path of $wd.
715 722
716 aio_readdir $pathname, $callback->($entries) 723 aio_readdir $pathname, $callback->($entries)
717 Unlike the POSIX call of the same name, "aio_readdir" reads an 724 Unlike the POSIX call of the same name, "aio_readdir" reads an
718 entire directory (i.e. opendir + readdir + closedir). The entries 725 entire directory (i.e. opendir + readdir + closedir). The entries
719 will not be sorted, and will NOT include the "." and ".." entries. 726 will not be sorted, and will NOT include the "." and ".." entries.
942 949
943 It touches (reads or writes) all memory pages in the specified range 950 It touches (reads or writes) all memory pages in the specified range
944 inside the scalar. All caveats and parameters are the same as for 951 inside the scalar. All caveats and parameters are the same as for
945 "aio_msync", above, except for flags, which must be either 0 (which 952 "aio_msync", above, except for flags, which must be either 0 (which
946 reads all pages and ensures they are instantiated) or 953 reads all pages and ensures they are instantiated) or
947 "IO::AIO::MT_MODIFY", which modifies the memory page s(by reading 954 "IO::AIO::MT_MODIFY", which modifies the memory pages (by reading
948 and writing an octet from it, which dirties the page). 955 and writing an octet from it, which dirties the page).
949 956
950 aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status) 957 aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status)
951 This is a rather advanced IO::AIO call, which works best on 958 This is a rather advanced IO::AIO call, which works best on
952 mmap(2)ed scalars. 959 mmap(2)ed scalars.
1121 aio_stat [$etcdir, "passwd"], sub { 1128 aio_stat [$etcdir, "passwd"], sub {
1122 # yay 1129 # yay
1123 }; 1130 };
1124 }; 1131 };
1125 1132
1126 That "aio_wd" is a request and not a normal function shows that creating 1133 The fact that "aio_wd" is a request and not a normal function shows that
1127 an IO::AIO::WD object is itself a potentially blocking operation, which 1134 creating an IO::AIO::WD object is itself a potentially blocking
1128 is why it is done asynchronously. 1135 operation, which is why it is done asynchronously.
1129 1136
1130 To stat the directory obtained with "aio_wd" above, one could write 1137 To stat the directory obtained with "aio_wd" above, one could write
1131 either of the following three request calls: 1138 either of the following three request calls:
1132 1139
1133 aio_lstat "/etc" , sub { ... # pathname as normal string 1140 aio_lstat "/etc" , sub { ... # pathname as normal string
1153 will still point to the original directory. Most functions accepting a 1160 will still point to the original directory. Most functions accepting a
1154 pathname will use the directory fd on newer systems, and the string on 1161 pathname will use the directory fd on newer systems, and the string on
1155 older systems. Some functions (such as realpath) will always rely on the 1162 older systems. Some functions (such as realpath) will always rely on the
1156 string form of the pathname. 1163 string form of the pathname.
1157 1164
1158 So this fucntionality is mainly useful to get some protection against 1165 So this functionality is mainly useful to get some protection against
1159 "chdir", to easily get an absolute path out of a relative path for 1166 "chdir", to easily get an absolute path out of a relative path for
1160 future reference, and to speed up doing many operations in the same 1167 future reference, and to speed up doing many operations in the same
1161 directory (e.g. when stat'ing all files in a directory). 1168 directory (e.g. when stat'ing all files in a directory).
1162 1169
1163 The following functions implement this working directory abstraction: 1170 The following functions implement this working directory abstraction:
1173 Since passing "undef" as working directory component of a pathname 1180 Since passing "undef" as working directory component of a pathname
1174 fails the request with "ENOENT", there is often no need for error 1181 fails the request with "ENOENT", there is often no need for error
1175 checking in the "aio_wd" callback, as future requests using the 1182 checking in the "aio_wd" callback, as future requests using the
1176 value will fail in the expected way. 1183 value will fail in the expected way.
1177 1184
1178 If this call isn't available because your OS lacks it or it couldn't
1179 be detected, it will be emulated by calling "fsync" instead.
1180
1181 IO::AIO::CWD 1185 IO::AIO::CWD
1182 This is a compiletime constant (object) that represents the process 1186 This is a compiletime constant (object) that represents the process
1183 current working directory. 1187 current working directory.
1184 1188
1185 Specifying this object as working directory object for a pathname is 1189 Specifying this object as working directory object for a pathname is
1186 as if the pathname would be specified directly, without a directory 1190 as if the pathname would be specified directly, without a directory
1187 object, e.g., these calls are functionally identical: 1191 object. For example, these calls are functionally identical:
1188 1192
1189 aio_stat "somefile", sub { ... }; 1193 aio_stat "somefile", sub { ... };
1190 aio_stat [IO::AIO::CWD, "somefile"], sub { ... }; 1194 aio_stat [IO::AIO::CWD, "somefile"], sub { ... };
1195
1196 To recover the path associated with an IO::AIO::WD object, you can use
1197 "aio_realpath":
1198
1199 aio_realpath $wd, sub {
1200 warn "path is $_[0]\n";
1201 };
1202
1203 Currently, "aio_statvfs" always, and "aio_rename" and "aio_rmdir"
1204 sometimes, fall back to using an absolue path.
1191 1205
1192 IO::AIO::REQ CLASS 1206 IO::AIO::REQ CLASS
1193 All non-aggregate "aio_*" functions return an object of this class when 1207 All non-aggregate "aio_*" functions return an object of this class when
1194 called in non-void context. 1208 called in non-void context.
1195 1209
1347 results. 1361 results.
1348 1362
1349 See "poll_cb" for an example. 1363 See "poll_cb" for an example.
1350 1364
1351 IO::AIO::poll_cb 1365 IO::AIO::poll_cb
1352 Process some outstanding events on the result pipe. You have to call 1366 Process some requests that have reached the result phase (i.e. they
1367 have been executed but the results are not yet reported). You have
1368 to call this "regularly" to finish outstanding requests.
1369
1353 this regularly. Returns 0 if all events could be processed (or there 1370 Returns 0 if all events could be processed (or there were no events
1354 were no events to process), or -1 if it returned earlier for 1371 to process), or -1 if it returned earlier for whatever reason.
1355 whatever reason. Returns immediately when no events are outstanding. 1372 Returns immediately when no events are outstanding. The amount of
1356 The amount of events processed depends on the settings of 1373 events processed depends on the settings of "IO::AIO::max_poll_req",
1357 "IO::AIO::max_poll_req" and "IO::AIO::max_poll_time". 1374 "IO::AIO::max_poll_time" and "IO::AIO::max_outstanding".
1358 1375
1359 If not all requests were processed for whatever reason, the 1376 If not all requests were processed for whatever reason, the poll
1360 filehandle will still be ready when "poll_cb" returns, so normally 1377 file descriptor will still be ready when "poll_cb" returns, so
1361 you don't have to do anything special to have it called later. 1378 normally you don't have to do anything special to have it called
1379 later.
1362 1380
1363 Apart from calling "IO::AIO::poll_cb" when the event filehandle 1381 Apart from calling "IO::AIO::poll_cb" when the event filehandle
1364 becomes ready, it can be beneficial to call this function from loops 1382 becomes ready, it can be beneficial to call this function from loops
1365 which submit a lot of requests, to make sure the results get 1383 which submit a lot of requests, to make sure the results get
1366 processed when they become available and not just when the loop is 1384 processed when they become available and not just when the loop is
1374 Event->io (fd => IO::AIO::poll_fileno, 1392 Event->io (fd => IO::AIO::poll_fileno,
1375 poll => 'r', async => 1, 1393 poll => 'r', async => 1,
1376 cb => \&IO::AIO::poll_cb); 1394 cb => \&IO::AIO::poll_cb);
1377 1395
1378 IO::AIO::poll_wait 1396 IO::AIO::poll_wait
1379 If there are any outstanding requests and none of them in the result 1397 Wait until either at least one request is in the result phase or no
1380 phase, wait till the result filehandle becomes ready for reading 1398 requests are outstanding anymore.
1381 (simply does a "select" on the filehandle. This is useful if you 1399
1382 want to synchronously wait for some requests to finish). 1400 This is useful if you want to synchronously wait for some requests
1401 to become ready, without actually handling them.
1383 1402
1384 See "nreqs" for an example. 1403 See "nreqs" for an example.
1385 1404
1386 IO::AIO::poll 1405 IO::AIO::poll
1387 Waits until some requests have been handled. 1406 Waits until some requests have been handled.
1499 1518
1500 This is a very bad function to use in interactive programs because 1519 This is a very bad function to use in interactive programs because
1501 it blocks, and a bad way to reduce concurrency because it is 1520 it blocks, and a bad way to reduce concurrency because it is
1502 inexact: Better use an "aio_group" together with a feed callback. 1521 inexact: Better use an "aio_group" together with a feed callback.
1503 1522
1504 It's main use is in scripts without an event loop - when you want to 1523 Its main use is in scripts without an event loop - when you want to
1505 stat a lot of files, you can write somehting like this: 1524 stat a lot of files, you can write somehting like this:
1506 1525
1507 IO::AIO::max_outstanding 32; 1526 IO::AIO::max_outstanding 32;
1508 1527
1509 for my $path (...) { 1528 for my $path (...) {
1540 IO::AIO::npending 1559 IO::AIO::npending
1541 Returns the number of requests currently in the pending state 1560 Returns the number of requests currently in the pending state
1542 (executed, but not yet processed by poll_cb). 1561 (executed, but not yet processed by poll_cb).
1543 1562
1544 MISCELLANEOUS FUNCTIONS 1563 MISCELLANEOUS FUNCTIONS
1545 IO::AIO implements some functions that might be useful, but are not 1564 IO::AIO implements some functions that are useful when you want to use
1546 asynchronous. 1565 some "Advanced I/O" function not available to in Perl, without going the
1566 "Asynchronous I/O" route. Many of these have an asynchronous "aio_*"
1567 counterpart.
1547 1568
1548 IO::AIO::sendfile $ofh, $ifh, $offset, $count 1569 IO::AIO::sendfile $ofh, $ifh, $offset, $count
1549 Calls the "eio_sendfile_sync" function, which is like 1570 Calls the "eio_sendfile_sync" function, which is like
1550 "aio_sendfile", but is blocking (this makes most sense if you know 1571 "aio_sendfile", but is blocking (this makes most sense if you know
1551 the input data is likely cached already and the output filehandle is 1572 the input data is likely cached already and the output filehandle is
1659 "IO::AIO::SPLICE_F_MORE" and "IO::AIO::SPLICE_F_GIFT". 1680 "IO::AIO::SPLICE_F_MORE" and "IO::AIO::SPLICE_F_GIFT".
1660 1681
1661 See the splice(2) manpage for details. 1682 See the splice(2) manpage for details.
1662 1683
1663 IO::AIO::tee $r_fh, $w_fh, $length, $flags 1684 IO::AIO::tee $r_fh, $w_fh, $length, $flags
1664 Calls the GNU/Linux tee(2) syscall, see it's manpage and the 1685 Calls the GNU/Linux tee(2) syscall, see its manpage and the
1665 description for "IO::AIO::splice" above for details. 1686 description for "IO::AIO::splice" above for details.
1687
1688 $actual_size = IO::AIO::pipesize $r_fh[, $new_size]
1689 Attempts to query or change the pipe buffer size. Obviously works
1690 only on pipes, and currently works only on GNU/Linux systems, and
1691 fails with -1/"ENOSYS" everywhere else. If anybody knows how to
1692 influence pipe buffer size on other systems, drop me a note.
1666 1693
1667EVENT LOOP INTEGRATION 1694EVENT LOOP INTEGRATION
1668 It is recommended to use AnyEvent::AIO to integrate IO::AIO 1695 It is recommended to use AnyEvent::AIO to integrate IO::AIO
1669 automatically into many event loops: 1696 automatically into many event loops:
1670 1697

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines