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.149 by root, Sat Jun 6 18:19:35 2009 UTC vs.
Revision 1.150 by root, Sat Jun 6 19:44:17 2009 UTC

548The flags are a combination of the following constants, ORed together (the 548The flags are a combination of the following constants, ORed together (the
549flags will also be passed to the callback, possibly modified): 549flags will also be passed to the callback, possibly modified):
550 550
551=over 4 551=over 4
552 552
553=item AIO::READDIR_DENTS 553=item IO::AIO::READDIR_DENTS
554 554
555When this flag is off, then the callback gets an arrayref with of names 555When this flag is off, then the callback gets an arrayref with of names
556only (as with C<aio_readdir>), otherwise it gets an arrayref with 556only (as with C<aio_readdir>), otherwise it gets an arrayref with
557C<[$name, $inode, $type]> arrayrefs, each describing a single directory 557C<[$name, $type, $inode]> arrayrefs, each describing a single directory
558entry in more detail. 558entry in more detail.
559 559
560C<$name> is the name of the entry. 560C<$name> is the name of the entry.
561
562C<$type> is one of the C<IO::AIO::DT_xxx> constants:
563
564C<IO::AIO::DT_UNKNOWN>, C<IO::AIO::DT_FIFO>, C<IO::AIO::DT_CHR>, C<IO::AIO::DT_DIR>,
565C<IO::AIO::DT_BLK>, C<IO::AIO::DT_REG>, C<IO::AIO::DT_LNK>, C<IO::AIO::DT_SOCK>,
566C<IO::AIO::DT_WHT>.
567
568C<IO::AIO::DT_UNKNOWN> means just that: readdir does not know. If you need to
569know, you have to run stat yourself. Also, for speed reasons, the C<$type>
570scalars are read-only: you can not modify them.
561 571
562C<$inode> is the inode number (which might not be exact on systems with 64 572C<$inode> is the inode number (which might not be exact on systems with 64
563bit inode numbers and 32 bit perls). On systems that do not deliver the 573bit inode numbers and 32 bit perls). On systems that do not deliver the
564inode information, this will always be zero. 574inode information, this will always be zero.
565 575
566C<$type> is one of the C<AIO::DT_xxx> constants:
567
568C<AIO::DT_UNKNOWN>, C<AIO::DT_FIFO>, C<AIO::DT_CHR>, C<AIO::DT_DIR>,
569C<AIO::DT_BLK>, C<AIO::DT_REG>, C<AIO::DT_LNK>, C<AIO::DT_SOCK>,
570C<AIO::DT_WHT>.
571
572C<AIO::DT_UNKNOWN> means just that: readdir does not know. If you need to
573know, you have to run stat yourself. Also, for speed reasons, the C<$type>
574scalars are read-only: you can not modify them.
575
576=item AIO::READDIR_DIRS_FIRST 576=item IO::AIO::READDIR_DIRS_FIRST
577 577
578When this flag is set, then the names will be returned in an order where 578When this flag is set, then the names will be returned in an order where
579likely directories come first. This is useful when you need to quickly 579likely directories come first. This is useful when you need to quickly
580find directories, or you want to find all directories while avoiding to 580find directories, or you want to find all directories while avoiding to
581stat() each entry. 581stat() each entry.
583If the system returns type information in readdir, then this is used 583If the system returns type information in readdir, then this is used
584to find directories directly. Otherwise, likely directories are files 584to find directories directly. Otherwise, likely directories are files
585beginning with ".", or otherwise files with no dots, of which files with 585beginning with ".", or otherwise files with no dots, of which files with
586short names are tried first. 586short names are tried first.
587 587
588=item AIO::READDIR_STAT_ORDER 588=item IO::AIO::READDIR_STAT_ORDER
589 589
590When this flag is set, then the names will be returned in an order 590When this flag is set, then the names will be returned in an order
591suitable for stat()'ing each one. That is, when you plan to stat() 591suitable for stat()'ing each one. That is, when you plan to stat()
592all files in the given directory, then the returned order will likely 592all files in the given directory, then the returned order will likely
593be fastest. 593be fastest.
594 594
595If both this flag and IO::READDIR_DIRS_FIRST are specified, then the 595If both this flag and C<IO::AIO::READDIR_DIRS_FIRST> are specified, then
596likely dirs come first, resulting in a less optimal stat order. 596the likely dirs come first, resulting in a less optimal stat order.
597 597
598=item AIO::READDIR_FOUND_UNKNOWN 598=item IO::AIO::READDIR_FOUND_UNKNOWN
599 599
600This flag should not be set when calling C<aio_readdirx>. Instead, it 600This flag should not be set when calling C<aio_readdirx>. Instead, it
601is being set by C<aio_readdirx>, when any of the C<$type>'s found were 601is being set by C<aio_readdirx>, when any of the C<$type>'s found were
602C<AIO::DT_UNKNOWN>. The absense of this flag therefore indicates that all 602C<IO::AIO::DT_UNKNOWN>. The absense of this flag therefore indicates that all
603C<$type>'s are known, which can be used to speed up some algorithms. 603C<$type>'s are known, which can be used to speed up some algorithms.
604 604
605=back 605=back
606 606
607 607
840 # take the slow route if anything looks fishy 840 # take the slow route if anything looks fishy
841 if ($hash1 ne $hash2 or (stat _)[9] == $now) { 841 if ($hash1 ne $hash2 or (stat _)[9] == $now) {
842 $ndirs = -1; 842 $ndirs = -1;
843 } else { 843 } else {
844 # if nlink == 2, we are finished 844 # if nlink == 2, we are finished
845 # on non-posix-fs's, we rely on nlink < 2 845 # for non-posix-fs's, we rely on nlink < 2
846 $ndirs = (stat _)[3] - 2 846 $ndirs = (stat _)[3] - 2
847 or return $grp->result ([], $entries); 847 or return $grp->result ([], $entries);
848 } 848 }
849 849
850 my (@dirs, @nondirs); 850 my (@dirs, @nondirs);
854 }; 854 };
855 855
856 limit $statgrp $maxreq; 856 limit $statgrp $maxreq;
857 feed $statgrp sub { 857 feed $statgrp sub {
858 return unless @$entries; 858 return unless @$entries;
859 my $entry = pop @$entries; 859 my $entry = shift @$entries;
860 860
861 aioreq_pri $pri; 861 aioreq_pri $pri;
862 add $statgrp aio_stat "$path/$entry/.", sub { 862 add $statgrp aio_stat "$path/$entry/.", sub {
863 if ($_[0] < 0) { 863 if ($_[0] < 0) {
864 push @nondirs, $entry; 864 push @nondirs, $entry;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines