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

Comparing IO-AIO/README (file contents):
Revision 1.31 by root, Thu May 29 03:35:03 2008 UTC vs.
Revision 1.34 by root, Thu Nov 20 09:01:40 2008 UTC

175 All the "aio_*" calls are more or less thin wrappers around the syscall 175 All the "aio_*" calls are more or less thin wrappers around the syscall
176 with the same name (sans "aio_"). The arguments are similar or 176 with the same name (sans "aio_"). The arguments are similar or
177 identical, and they all accept an additional (and optional) $callback 177 identical, and they all accept an additional (and optional) $callback
178 argument which must be a code reference. This code reference will get 178 argument which must be a code reference. This code reference will get
179 called with the syscall return code (e.g. most syscalls return -1 on 179 called with the syscall return code (e.g. most syscalls return -1 on
180 error, unlike perl, which usually delivers "false") as it's sole 180 error, unlike perl, which usually delivers "false") as its sole argument
181 argument when the given syscall has been executed asynchronously. 181 after the given syscall has been executed asynchronously.
182 182
183 All functions expecting a filehandle keep a copy of the filehandle 183 All functions expecting a filehandle keep a copy of the filehandle
184 internally until the request has finished. 184 internally until the request has finished.
185 185
186 All functions return request objects of type IO::AIO::REQ that allow 186 All functions return request objects of type IO::AIO::REQ that allow
199 the user environment, d) use Glib::filename_from_unicode on unicode 199 the user environment, d) use Glib::filename_from_unicode on unicode
200 filenames or e) use something else to ensure your scalar has the correct 200 filenames or e) use something else to ensure your scalar has the correct
201 contents. 201 contents.
202 202
203 This works, btw. independent of the internal UTF-8 bit, which IO::AIO 203 This works, btw. independent of the internal UTF-8 bit, which IO::AIO
204 handles correctly wether it is set or not. 204 handles correctly whether it is set or not.
205 205
206 $prev_pri = aioreq_pri [$pri] 206 $prev_pri = aioreq_pri [$pri]
207 Returns the priority value that would be used for the next request 207 Returns the priority value that would be used for the next request
208 and, if $pri is given, sets the priority for the next aio request. 208 and, if $pri is given, sets the priority for the next aio request.
209 209
451 aio_copy $srcpath, $dstpath, $callback->($status) 451 aio_copy $srcpath, $dstpath, $callback->($status)
452 Try to copy the *file* (directories not supported as either source 452 Try to copy the *file* (directories not supported as either source
453 or destination) from $srcpath to $dstpath and call the callback with 453 or destination) from $srcpath to $dstpath and call the callback with
454 the 0 (error) or -1 ok. 454 the 0 (error) or -1 ok.
455 455
456 This is a composite request that it creates the destination file 456 This is a composite request that creates the destination file with
457 with mode 0200 and copies the contents of the source file into it 457 mode 0200 and copies the contents of the source file into it using
458 using "aio_sendfile", followed by restoring atime, mtime, access 458 "aio_sendfile", followed by restoring atime, mtime, access mode and
459 mode and uid/gid, in that order. 459 uid/gid, in that order.
460 460
461 If an error occurs, the partial destination file will be unlinked, 461 If an error occurs, the partial destination file will be unlinked,
462 if possible, except when setting atime, mtime, access mode and 462 if possible, except when setting atime, mtime, access mode and
463 uid/gid, where errors are being ignored. 463 uid/gid, where errors are being ignored.
464 464
465 aio_move $srcpath, $dstpath, $callback->($status) 465 aio_move $srcpath, $dstpath, $callback->($status)
466 Try to move the *file* (directories not supported as either source 466 Try to move the *file* (directories not supported as either source
467 or destination) from $srcpath to $dstpath and call the callback with 467 or destination) from $srcpath to $dstpath and call the callback with
468 the 0 (error) or -1 ok. 468 the 0 (error) or -1 ok.
469 469
470 This is a composite request that tries to rename(2) the file first. 470 This is a composite request that tries to rename(2) the file first;
471 If rename files with "EXDEV", it copies the file with "aio_copy" 471 if rename fails with "EXDEV", it copies the file with "aio_copy"
472 and, if that is successful, unlinking the $srcpath. 472 and, if that is successful, unlinks the $srcpath.
473 473
474 aio_scandir $path, $maxreq, $callback->($dirs, $nondirs) 474 aio_scandir $path, $maxreq, $callback->($dirs, $nondirs)
475 Scans a directory (similar to "aio_readdir") but additionally tries 475 Scans a directory (similar to "aio_readdir") but additionally tries
476 to efficiently separate the entries of directory $path into two sets 476 to efficiently separate the entries of directory $path into two sets
477 of names, directories you can recurse into (directories), and ones 477 of names, directories you can recurse into (directories), and ones
542 callback with the fdatasync result code. 542 callback with the fdatasync result code.
543 543
544 If this call isn't available because your OS lacks it or it couldn't 544 If this call isn't available because your OS lacks it or it couldn't
545 be detected, it will be emulated by calling "fsync" instead. 545 be detected, it will be emulated by calling "fsync" instead.
546 546
547 aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status)
548 Sync the data portion of the file specified by $offset and $length
549 to disk (but NOT the metadata), by calling the Linux-specific
550 sync_file_range call. If sync_file_range is not available or it
551 returns ENOSYS, then fdatasync or fsync is being substituted.
552
553 $flags can be a combination of
554 "IO::AIO::SYNC_FILE_RANGE_WAIT_BEFORE",
555 "IO::AIO::SYNC_FILE_RANGE_WRITE" and
556 "IO::AIO::SYNC_FILE_RANGE_WAIT_AFTER": refer to the sync_file_range
557 manpage for details.
558
547 aio_pathsync $path, $callback->($status) 559 aio_pathsync $path, $callback->($status)
548 This request tries to open, fsync and close the given path. This is 560 This request tries to open, fsync and close the given path. This is
549 a composite request intended tosync directories after directory 561 a composite request intended to sync directories after directory
550 operations (E.g. rename). This might not work on all operating 562 operations (E.g. rename). This might not work on all operating
551 systems or have any specific effect, but usually it makes sure that 563 systems or have any specific effect, but usually it makes sure that
552 directory changes get written to disc. It works for anything that 564 directory changes get written to disc. It works for anything that
553 can be opened for read-only, not just directories. 565 can be opened for read-only, not just directories.
554 566
658 Their lifetime, simplified, looks like this: when they are empty, they 670 Their lifetime, simplified, looks like this: when they are empty, they
659 will finish very quickly. If they contain only requests that are in the 671 will finish very quickly. If they contain only requests that are in the
660 "done" state, they will also finish. Otherwise they will continue to 672 "done" state, they will also finish. Otherwise they will continue to
661 exist. 673 exist.
662 674
663 That means after creating a group you have some time to add requests. 675 That means after creating a group you have some time to add requests
664 And in the callbacks of those requests, you can add further requests to 676 (precisely before the callback has been invoked, which is only done
665 the group. And only when all those requests have finished will the the 677 within the "poll_cb"). And in the callbacks of those requests, you can
666 group itself finish. 678 add further requests to the group. And only when all those requests have
679 finished will the the group itself finish.
667 680
668 add $grp ... 681 add $grp ...
669 $grp->add (...) 682 $grp->add (...)
670 Add one or more requests to the group. Any type of IO::AIO::REQ can 683 Add one or more requests to the group. Any type of IO::AIO::REQ can
671 be added, including other groups, as long as you do not create 684 be added, including other groups, as long as you do not create
714 does not impose any limits). 727 does not impose any limits).
715 728
716 If the feed does not queue more requests when called, it will be 729 If the feed does not queue more requests when called, it will be
717 automatically removed from the group. 730 automatically removed from the group.
718 731
719 If the feed limit is 0, it will be set to 2 automatically. 732 If the feed limit is 0 when this method is called, it will be set to
733 2 automatically.
720 734
721 Example: 735 Example:
722 736
723 # stat all files in @files, but only ever use four aio requests concurrently: 737 # stat all files in @files, but only ever use four aio requests concurrently:
724 738
734 limit $grp $num 748 limit $grp $num
735 Sets the feeder limit for the group: The feeder will be called 749 Sets the feeder limit for the group: The feeder will be called
736 whenever the group contains less than this many requests. 750 whenever the group contains less than this many requests.
737 751
738 Setting the limit to 0 will pause the feeding process. 752 Setting the limit to 0 will pause the feeding process.
753
754 The default value for the limit is 0, but note that setting a feeder
755 automatically bumps it up to 2.
739 756
740 SUPPORT FUNCTIONS 757 SUPPORT FUNCTIONS
741 EVENT PROCESSING AND EVENT LOOP INTEGRATION 758 EVENT PROCESSING AND EVENT LOOP INTEGRATION
742 $fileno = IO::AIO::poll_fileno 759 $fileno = IO::AIO::poll_fileno
743 Return the *request result pipe file descriptor*. This filehandle 760 Return the *request result pipe file descriptor*. This filehandle

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines