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


Graphics & Media Lab. >> Библиотека | Курсы | Графикон

Hosted by Graphics & Media Lab
http://graphics.cs.msu.su
lab_logo
mailto: Laboratory