--- IO-AIO/AIO.pm 2005/07/20 21:55:27 1.22 +++ IO-AIO/AIO.pm 2005/08/16 22:22:18 1.27 @@ -58,15 +58,17 @@ package IO::AIO; +no warnings; + use base 'Exporter'; use Fcntl (); BEGIN { - $VERSION = 0.9; + $VERSION = 1.1; @EXPORT = qw(aio_read aio_write aio_open aio_close aio_stat aio_lstat aio_unlink - aio_fsync aio_fdatasync aio_readahead); + aio_rmdir aio_symlink aio_fsync aio_fdatasync aio_readahead); @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel max_outstanding nreqs); require XSLoader; @@ -85,7 +87,8 @@ perl, which usually delivers "false") as it's sole argument when the given syscall has been executed asynchronously. -All functions that expect a filehandle will also accept a file descriptor. +All functions expecting a filehandle keep a copy of the filehandle +internally until the request has finished. The filenames you pass to these routines I be absolute. The reason for this is that at the time the request is being executed, the current @@ -151,10 +154,6 @@ =item aio_readahead $fh,$offset,$length, $callback -Asynchronously reads the specified byte range into the page cache, using -the C syscall. If that syscall doesn't exist (likely if your OS -isn't Linux) the status will be C<-1> and C<$!> is set to C. - C populates the page cache with data from a file so that subsequent reads from that file will not block on disk I/O. The C<$offset> argument specifies the starting point from which data is to be read and @@ -164,6 +163,9 @@ (off-set+length). C does not read beyond the end of the file. The current file offset of the file is left unchanged. +If that syscall doesn't exist (likely if your OS isn't Linux) it will be +emulated by simply reading the data, which would have a similar effect. + =item aio_stat $fh_or_path, $callback =item aio_lstat $fh, $callback @@ -191,6 +193,11 @@ Asynchronously unlink (delete) a file and call the callback with the result code. +=item aio_rmdir $pathname, $callback + +Asynchronously rmdir (delete) a directory and call the callback with the +result code. + =item aio_fsync $fh, $callback Asynchronously call fsync on the given filehandle and call the callback @@ -199,8 +206,10 @@ =item aio_fdatasync $fh, $callback Asynchronously call fdatasync on the given filehandle and call the -callback with the fdatasync result code. Might set C<$!> to C if -C is not available. +callback with the fdatasync result code. + +If this call isn't available because your OS lacks it or it couldn't be +detected, it will be emulated by calling C instead. =back @@ -312,12 +321,16 @@ sub _fd2fh { return undef if $_[0] < 0; - # try to be perl5.6-compatible - local *AIO_FH; - open AIO_FH, "+<&=$_[0]" + # try to generate nice filehandles + my $sym = "IO::AIO::fd#$_[0]"; + local *$sym; + + open *$sym, "+<&=$_[0]" # usually works under any unix + or open *$sym, "<&=$_[0]" # cygwin needs this + or open *$sym, ">&=$_[0]" # or this or return undef; - *AIO_FH + *$sym } min_parallel 4; @@ -328,6 +341,13 @@ 1; +=head2 FORK BEHAVIOUR + +IO::AIO handles all outstanding AIO requests before the fork, destroys all +AIO threads, and recreates them in both the parent and the child after the +fork. + + =head1 SEE ALSO L, L.