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

Comparing IO-AIO/AIO.pm (file contents):
Revision 1.40 by root, Tue Aug 30 15:45:10 2005 UTC vs.
Revision 1.47 by root, Thu Dec 29 15:44:13 2005 UTC

14 aio_unlink "/tmp/file", sub { }; 14 aio_unlink "/tmp/file", sub { };
15 15
16 aio_read $fh, 30000, 1024, $buffer, 0, sub { 16 aio_read $fh, 30000, 1024, $buffer, 0, sub {
17 $_[0] > 0 or die "read error: $!"; 17 $_[0] > 0 or die "read error: $!";
18 }; 18 };
19
20 # AnyEvent
21 open my $fh, "<&=" . IO::AIO::poll_fileno or die "$!";
22 my $w = AnyEvent->io (fh => $fh, poll => 'r', cb => sub { IO::AIO::poll_cb });
19 23
20 # Event 24 # Event
21 Event->io (fd => IO::AIO::poll_fileno, 25 Event->io (fd => IO::AIO::poll_fileno,
22 poll => 'r', 26 poll => 'r',
23 cb => \&IO::AIO::poll_cb); 27 cb => \&IO::AIO::poll_cb);
63use base 'Exporter'; 67use base 'Exporter';
64 68
65use Fcntl (); 69use Fcntl ();
66 70
67BEGIN { 71BEGIN {
68 $VERSION = 1.6; 72 $VERSION = '1.72';
69 73
70 @EXPORT = qw(aio_sendfile aio_read aio_write aio_open aio_close aio_stat 74 @EXPORT = qw(aio_sendfile aio_read aio_write aio_open aio_close aio_stat
71 aio_lstat aio_unlink aio_rmdir aio_readdir aio_scandir aio_symlink 75 aio_lstat aio_unlink aio_rmdir aio_readdir aio_scandir aio_symlink
72 aio_fsync aio_fdatasync aio_readahead); 76 aio_fsync aio_fdatasync aio_readahead);
73 @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel 77 @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel
233=item aio_rmdir $pathname, $callback->($status) 237=item aio_rmdir $pathname, $callback->($status)
234 238
235Asynchronously rmdir (delete) a directory and call the callback with the 239Asynchronously rmdir (delete) a directory and call the callback with the
236result code. 240result code.
237 241
238=item aio_readdir $pathname $callback->($entries) 242=item aio_readdir $pathname, $callback->($entries)
239 243
240Unlike the POSIX call of the same name, C<aio_readdir> reads an entire 244Unlike the POSIX call of the same name, C<aio_readdir> reads an entire
241directory (i.e. opendir + readdir + closedir). The entries will not be 245directory (i.e. opendir + readdir + closedir). The entries will not be
242sorted, and will B<NOT> include the C<.> and C<..> entries. 246sorted, and will B<NOT> include the C<.> and C<..> entries.
243 247
294 298
295 $maxreq = 8 if $maxreq <= 0; 299 $maxreq = 8 if $maxreq <= 0;
296 300
297 # stat once 301 # stat once
298 aio_stat $path, sub { 302 aio_stat $path, sub {
299 $cb->() if $_[0]; 303 return $cb->() if $_[0];
300 my $hash1 = join ":", (stat _)[0,1,3,7,9]; 304 my $hash1 = join ":", (stat _)[0,1,3,7,9];
301 305
302 # read the directory entries 306 # read the directory entries
303 aio_readdir $path, sub { 307 aio_readdir $path, sub {
304 my $entries = shift 308 my $entries = shift
315 $ndirs = -1; 319 $ndirs = -1;
316 } else { 320 } else {
317 # if nlink == 2, we are finished 321 # if nlink == 2, we are finished
318 # on non-posix-fs's, we rely on nlink < 2 322 # on non-posix-fs's, we rely on nlink < 2
319 $ndirs = (stat _)[3] - 2 323 $ndirs = (stat _)[3] - 2
320 or $cb->([], $entries); 324 or return $cb->([], $entries);
321 } 325 }
322 326
323 # sort into likely dirs and likely nondirs 327 # sort into likely dirs and likely nondirs
324 # dirs == files without ".", short entries first 328 # dirs == files without ".", short entries first
325 $entries = [map $_->[0], 329 $entries = [map $_->[0],
341 } 345 }
342 } elsif (!$nreq) { 346 } elsif (!$nreq) {
343 # finished 347 # finished
344 undef $statcb; 348 undef $statcb;
345 undef $schedcb; 349 undef $schedcb;
346 $cb->(\@dirs, \@nondirs); 350 $cb->(\@dirs, \@nondirs) if $cb;
347 undef $cb; 351 undef $cb;
348 } 352 }
349 }; 353 };
350 $statcb = sub { 354 $statcb = sub {
351 my ($status, $entry) = @_; 355 my ($status, $entry) = @_;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines