=head1 NAME APR::Finfo - Perl API for APR fileinfo structure =head1 Synopsis use APR::Finfo (); use APR::Const -compile => qw(FINFO_NORM); my $finfo = APR::Finfo::stat("/tmp/test", APR::Const::FINFO_NORM, $pool); $device = $finfo->device; # (stat $file)[0] $inode = $finfo->inode; # (stat $file)[1] # stat returns an octal number while protection is hex $prot = $finfo->protection; # (stat $file)[2] $nlink = $finfo->nlink; # (stat $file)[3] $gid = $finfo->group; # (stat $file)[4] $uid = $finfo->user; # (stat $file)[5] $size = $finfo->size; # (stat $file)[7] $atime = $finfo->atime; # (stat $file)[8] $mtime = $finfo->mtime; # (stat $file)[9] $ctime = $finfo->ctime; # (stat $file)[10] $csize = $finfo->csize; # consumed size: not portable! $filetype = $finfo->filetype; # file/dir/socket/etc $fname = $finfo->fname; $name = $finfo->name; # in filesystem case: # valid fields that can be queried $valid = $finfo->valid; =head1 Description APR fileinfo structure provides somewhat similar information to Perl's C call, but you will want to use this module's API to query an already C filehandle to avoid an extra system call or to query attributes specific to APR file handles. During the HTTP request handlers coming after C>, Cfinfo|docs::2.0::api::Apache2::RequestRec/C_finfo_>> already contains the cached values from the apr's C call. So you don't want to perform it again, but instead get the C object via: my $finfo = $r->finfo; =head1 API C provides the following functions and/or methods: =head2 C Get the time the file was last accessed: $atime = $finfo->atime; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$atime> ( integer ) Last access time in seconds since the epoch =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[8] Note that this method may not be reliable on all platforms, most notably Win32 -- FAT32 filesystems appear to work properly, but NTFS filesystems do not. =head2 C Get the storage size consumed by the file $csize = $finfo->csize; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$csize> ( integer ) =item since: 2.0.00 =back Chances are that you don't want to use this method, since its functionality is not supported on most platforms (in which case it always returns 0). =head2 C Get the time the file was last changed $ctime = $finfo->ctime; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$ctime> ( integer ) Inode change time in seconds since the epoch =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[10] The ctime field is non-portable. In particular, you cannot expect it to be a "creation time", see "Files and Filesystems" in the I manpage for details. =head2 C Get the id of the device the file is on. $device = $finfo->device; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$device> ( integer ) =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[0] Note that this method is non-portable. It doesn't work on all platforms, most notably Win32. =head2 C Get the type of file. $filetype = $finfo->filetype; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$filetype> ( C> ) =item since: 2.0.00 =back For example: use APR::Pool; use APR::Finfo; use APR::Const -compile => qw(FILETYPE_DIR FILETYPE_REG FINFO_NORM); my $pool = APR::Pool->new(); my $finfo = APR::Finfo::stat("/tmp", APR::Const::FINFO_NORM, $pool); my $finfo = $finfo->filetype; if ($finfo == APR::Const::FILETYPE_REG) { print "regular file"; } elsif ($finfo == APR::Const::FILETYPE_REG) { print "directory"; } else { print "other file"; } Since F is a directory, this will print: directory =head2 C Get the pathname of the file (possibly unrooted) $fname = $finfo->fname; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$filetype> ( string ) =item since: 2.0.00 =back =head2 C Get the group id that owns the file: $gid = $finfo->group; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$gid> ( number ) =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[5] Note that this method may not be meaningful on all platforms, most notably Win32. Incorrect results have also been reported on some versions of OSX. =head2 C Get the inode of the file. $inode = $finfo->inode; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$inode> ( integer ) =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[1] Note that this method may not be meaningful on all platforms, most notably Win32. =head2 C The time the file was last modified $mtime = $finfo->mtime; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$mtime> ( integer ) Last modify time in seconds since the epoch =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[9] =head2 C Get the file's name (no path) in filesystem case: $name = $finfo->name; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$device> ( string ) =item since: 2.0.00 =back =head2 C Get the number of hard links to the file. $nlink = $finfo->nlink; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$nlink> ( integer ) =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[3] =head2 C Get the access permissions of the file. Mimics Unix access rights. $prot = $finfo->protection; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$prot> ( C> ) =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[2] Note: Perl's stat returns an octal number while mod_perl's C returns a hex number. See perldoc -f stat and APR's file_io for more information on each. =head2 C Get the size of the file $size = $finfo->size; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$size> ( integer ) Total size of file, in bytes =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[7] =head2 C Get the specified file's stats. $finfo = APR::Finfo::stat($fname, $wanted_fields, $p); =over 4 =item arg1: C<$fname> ( string ) The path to the file to C. =item arg2: C<$wanted_fields> ( C> ) The desired fields, as a bitmask flag of C> constants. Notice that you can also use the constants that already combine several elements in one. For example C> asks for all protection bits, C> asks for the following fields: type, mtime, ctime, atime, size and C> asks for all atomic unix C fields (similar to perl's C). =item arg3: C<$p> ( C> ) the pool to use to allocate the file stat structure. =item ret: C<$finfo> ( C> ) =item since: 2.0.00 =back For example, here is how to get most of the C fields: use APR::Pool (); use APR::Finfo (); use APR::Const -compile => qw(FINFO_NORM); my $pool = APR::Pool->new(); my $finfo = APR::Finfo::stat("/tmp/test", APR::Const::FINFO_NORM, $pool); =head2 C Get the user id that owns the file: $uid = $finfo->user; =over 4 =item obj: C<$finfo> ( C> ) =item return: C<$uid> ( number ) =item since: 2.0.00 =back This method returns the same value as Perl's: (stat $filename)[4] Note that this method may not be meaningful on all platforms, most notably Win32. =head2 C The bitmask describing valid fields of this apr_finfo_t structure including all available 'wanted' fields and potentially more $valid = $finfo->valid; =over 4 =item obj: C<$finfo> ( C> ) =item arg1: C<$valid> ( bitmask ) This bitmask flag should be bit-OR'ed against C> constants. =item since: 2.0.00 =back =head1 See Also L. =head1 Copyright mod_perl 2.0 and its core modules are copyrighted under The Apache Software License, Version 2.0. =head1 Authors L. =cut