docs::a...R::Finfo(3)
πΈ NAME πΈ
Okay bestie, this page is docs::a...R::Finfo(3) β User Contributed Perl Documentation β and the main character is APR::Finfo, the Perl API for the APR fileinfo structure. π
β¨
β¨ Synopsis β¨
Here's the whole vibe check, copied exactly because every field matters:
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;
π Description π
The APR fileinfo structure provides somewhat similar information to Perl's stat() call β but you'll want to use this module's API to query an already "stat()'ed" filehandle, so you can avoid an extra system call or query attributes specific to APR file handles. β¨
During the HTTP request handlers coming after "PerlMapToStorageHandler", "$r->finfo" already contains the cached values from the apr's stat() call. So you don't want to perform it again β instead get the "ARP::Finfo" object via:
my $finfo = $r->finfo;
π¦ API π¦
APR::Finfo provides the following functions and/or methods:
π« atime π«
Get the time the file was last accessed:
$atime = $finfo->atime;
- obj:
$finfo("APR::Finfo object") - return:
$atime(integer) β Last access time in seconds since the epoch - since:
2.0.00
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. π
π§ csize π§
Get the storage size consumed by the file:
$csize = $finfo->csize;
- obj:
$finfo("APR::Finfo object") - return:
$csize(integer) - since:
2.0.00
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). π
π ctime π
Get the time the file was last changed:
$ctime = $finfo->ctime;
- obj:
$finfo("APR::Finfo object") - return:
$ctime(integer) β Inode change time in seconds since the epoch - since:
2.0.00
This method returns the same value as Perl's:
(stat $filename)[10]
Thectimefield is non-portable. In particular, you cannot expect it to be a"creation time", see"Files and Filesystems"in the perlport manpage for details. π
π¦ device π¦
Get the id of the device the file is on:
$device = $finfo->device;
- obj:
$finfo("APR::Finfo object") - return:
$device(integer) - since:
2.0.00
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. π
π filetype π
Get the type of file:
$filetype = $finfo->filetype;
- obj:
$finfo("APR::Finfo object") - return:
$filetype(":filetype constant") - since:
2.0.00
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 /tmp is a directory, this will print:
directory
π fname π
Get the pathname of the file (possibly unrooted):
$fname = $finfo->fname;
- obj:
$finfo("APR::Finfo object") - return:
$filetype(string) - since:
2.0.00
π group π
Get the group id that owns the file:
$gid = $finfo->group;
- obj:
$finfo("APR::Finfo object") - return:
$gid(number) - since:
2.0.00
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. π¬
β inode β
Get the inode of the file:
$inode = $finfo->inode;
- obj:
$finfo("APR::Finfo object") - return:
$inode(integer) - since:
2.0.00
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. π
πΈ mtime πΈ
The time the file was last modified:
$mtime = $finfo->mtime;
- obj:
$finfo("APR::Finfo object") - return:
$mtime(integer) β Last modify time in seconds since the epoch - since:
2.0.00
This method returns the same value as Perl's:
(stat $filename)[9]
π«Ά name π«Ά
Get the file's name (no path) in filesystem case:
$name = $finfo->name;
- obj:
$finfo("APR::Finfo object") - return:
$device(string) - since:
2.0.00
π₯ nlink π₯
Get the number of hard links to the file:
$nlink = $finfo->nlink;
- obj:
$finfo("APR::Finfo object") - return:
$nlink(integer) - since:
2.0.00
This method returns the same value as Perl's:
(stat $filename)[3]
π protection π
Get the access permissions of the file. Mimics Unix access rights:
$prot = $finfo->protection;
- obj:
$finfo("APR::Finfo object") - return:
$prot(":fprot constant") - since:
2.0.00
This method returns the same value as Perl's:
(stat $filename)[2]
Note: Perl'sstatreturns an octal number while mod_perl's"protection"returns a hex number.
See perldoc -f stat and APR's file_io for more information on each. β¨
π§ size π§
Get the size of the file:
$size = $finfo->size;
- obj:
$finfo("APR::Finfo object") - return:
$size(integer) β Total size of file, in bytes - since:
2.0.00
This method returns the same value as Perl's:
(stat $filename)[7]
π
stat π
Get the specified file's stats:
$finfo = APR::Finfo::stat($fname, $wanted_fields, $p);
- arg1:
$fname(string) β The path to the file tostat(). - arg2:
$wanted_fields(":finfo constant") β The desired fields, as a bitmask flag of"APR::FINFO_*"constants.
Notice that you can also use the constants that already combine several elements in one. For example "APR::Const::FINFO_PROT" asks for all protection bits, "APR::Const::FINFO_MIN" asks for the following fields: type, mtime, ctime, atime, size and "APR::Const::FINFO_NORM" asks for all atomic unix apr_stat() fields (similar to perl's stat()).
- arg3:
$p("APR::Pool object") β the pool to use to allocate the file stat structure. - ret:
$finfo("APR::Finfo object") - since:
2.0.00
For example, here is how to get most of the "stat" 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);
π user π
Get the user id that owns the file:
$uid = $finfo->user;
- obj:
$finfo("APR::Finfo object") - return:
$uid(number) - since:
2.0.00
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. π
π valid π
The bitmask describing valid fields of this apr_finfo_t structure including all available 'wanted' fields and potentially more:
$valid = $finfo->valid;
- obj:
$finfo("APR::Finfo object") - arg1:
$valid(bitmask) β This bitmask flag should be bit-OR'ed against":finfo constant"constants. - since:
2.0.00
π See Also π
mod_perl 2.0 documentation.
π Copyright π
mod_perl 2.0 and its core modules are copyrighted under The Apache Software License, Version 2.0.
π Authors π
The mod_perl development team and numerous contributors.
That's the whole page, bestie! This one is docs::a...R::Finfo(3) from perl v5.42.3, dated 2023-10-21. Go query those file stats and slay. πβ¨
π¦ where this page comes from
- nixos 26.05: mod_perl 2.0.13
- nixpkgs unstable: mod_perl 2.0.13
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms