Getting Information About a File With stat
Getting Information About a File With stat
-
The stat function produces useful information about files that you can
use in your file management functions. The stat function returns a thirteen-element
array of file information using the syntax:
open ([FILE_HANDLE_NAME], "[filename]")||
&CgiDie ("Can't open file");
($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
$atime, $mtime, $ctime, $blksize, $blocks) =
stat([FILE_HANDLE_NAME]);
close ([FILE_HANDLE_NAME]);
The following table describes the elements returned by stat
Variable |
Description |
$dev |
The device that the file resides on |
$ino |
The inode for this file |
$mode |
The permissions for the file |
$nlink |
The number of hard links to the file |
$uid |
The numerical user ID for the file owner |
$gid |
The numerical group ID for the file owner |
$rdev |
The device type if the file is a device |
$size |
The size of the file in bytes |
$atime |
When the file was last accessed |
$mtime |
When the file was last modified |
$ctime |
When the file status was last changed |
$blksize |
The optimal block size for i/o operations on the
file system containing the file |
$blocks |
The number of blocks allocated to the file |
-
For the most part, CGI scripts will need to
take advantage only of $atime, $mtime, $ctime, $mode and $size. $size and
$mode are fairly straight forward in usage. However, the usage of the "time"
variables is a bit subtle.
-
The time values returned by stat are formatted in terms of the number of
non-leap seconds since January 1, 1970, UTC. Thus, the stat function might
yield a result such as $mtime is equal to "838128443". Likewise, the time
function returns the current time in the same format. Thus, the scalar
variable $current_time is assigned the current time with the following
syntax:
$current_time = time;
Once you have both the age of the file and the current time, you can use
arithmetic to compare them for various operations such as the pruning of
a Session Files directory after a certain amount of time.
For example, the following code snippet can be used to prune the file "289576893.dat"
if it is older than an administratively-defined amount of time.
$seconds_to_save = 3600;
$age_of_file = $current_time - $mtime ;
if ($age_of_file > $seconds_to_save)
{
unlink ("289576893.dat");
}
If you are interested in what the actual day is,
and not the number of seconds since 1970, you must use the localtime function
to convert the value to a more human-recognizable form using the syntax:
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
= localtime (time); |
-
The following code gets the same information for an $mtime value extracted
from stat:
($sec, $min, $hour, $mday, $mon, $year,
$wday, $yday, $isdst) = localtime ($mtime);
Additional Resources:
File
Tests
Table of Contents
Opening, Reading
and Closing Directories
|