Perl5 リファレンス



       stat FILEHANDLE

       stat EXPR

       stat    Returns a 13-element list giving the status info
               for a file, either the file opened via FILEHANDLE,
               or named by EXPR.  If EXPR is omitted, it stats
               `$_'.  Returns a null list if the stat fails.
               Typically used as follows:

                   ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
                      $atime,$mtime,$ctime,$blksize,$blocks)
                          = stat($filename);

               Not all fields are supported on all filesystem
               types.  Here are the meaning of the fields:

                 0 dev      device number of filesystem
                 1 ino      inode number
                 2 mode     file mode  (type and permissions)
                 3 nlink    number of (hard) links to the file
                 4 uid      numeric user ID of file's owner
                 5 gid      numeric group ID of file's owner
                 6 rdev     the device identifier (special files only)
                 7 size     total size of file, in bytes
                 8 atime    last access time in seconds since the epoch
                 9 mtime    last modify time in seconds since the epoch
                10 ctime    inode change time (NOT creation time!) in seconds since the epoch
                11 blksize  preferred block size for file system I/O
                12 blocks   actual number of blocks allocated

               (The epoch was at 00:00 January 1, 1970 GMT.)

               If stat is passed the special filehandle
               consisting of an underline, no stat is done, but
               the current contents of the stat structure from
               the last stat or filetest are returned.  Example:

                   if (-x $file && (($d) = stat(_)) && $d < 0) {
                       print "$file is executable NFS file\n";
                   }

               (This works on machines only for which the device
               number is negative under NFS.)

               Because the mode contains both the file type and
               its permissions, you should mask off the file type
               portion and (s)printf using a `"%o"' if you want
               to see the real permissions.

                   $mode = (stat($filename))[2];
                   printf "Permissions are %04o\n", $mode & 07777;

               In scalar context, `stat' returns a boolean value
               indicating success or failure, and, if successful,
               sets the information associated with the special
               filehandle `_'.

               The File::stat module provides a convenient, by-
               name access mechanism:

                   use File::stat;
                   $sb = stat($filename);
                   printf "File is %s, size is %s, perm %04o, mtime %s\n",
                       $filename, $sb->size, $sb->mode & 07777,
                       scalar localtime $sb->mtime;

               You can import symbolic mode constants (`S_IF*')
               and functions (`S_IS*') from the Fcntl module:

                   use Fcntl ':mode';

                   $mode = (stat($filename))[2];

                   $user_rwx      = ($mode & S_IRWXU) >> 6;
                   $group_read    = ($mode & S_IRGRP) >> 3;
                   $other_execute =  $mode & S_IXOTH;

                   printf "Permissions are %04o\n", S_ISMODE($mode), "\n";

                   $is_setuid     =  $mode & S_ISUID;
                   $is_setgid     =  S_ISDIR($mode);

               You could write the last two using the `-u' and
               `-d' operators.  The commonly available S_IF*
               constants are

                   # Permissions: read, write, execute, for user, group, others.

                   S_IRWXU S_IRUSR S_IWUSR S_IXUSR
                   S_IRWXG S_IRGRP S_IWGRP S_IXGRP
                   S_IRWXO S_IROTH S_IWOTH S_IXOTH

                   # Setuid/Setgid/Stickiness.

                   S_ISUID S_ISGID S_ISVTX S_ISTXT

                   # File types.  Not necessarily all are available on your system.

                   S_IFREG S_IFDIR S_IFLNK S_IFBLK S_ISCHR S_IFIFO S_IFSOCK S_IFWHT S_ENFMT

                   # The following are compatibility aliases for S_IRUSR, S_IWUSR, S_IXUSR.

                   S_IREAD S_IWRITE S_IEXEC

               and the S_IF* functions are

                   S_IFMODE($mode)     the part of $mode containg the permission bits
                                       and the setuid/setgid/sticky bits

                   S_IFMT($mode)       the part of $mode containing the file type
                                       which can be bit-anded with e.g. S_IFREG
                                       or with the following functions

                   # The operators -f, -d, -l, -b, -c, -p, and -s.

                   S_ISREG($mode) S_ISDIR($mode) S_ISLNK($mode)
                   S_ISBLK($mode) S_ISCHR($mode) S_ISFIFO($mode) S_ISSOCK($mode)

                   # No direct -X operator counterpart, but for the first one
                   # the -g operator is often equivalent.  The ENFMT stands for
                   # record flocking enforcement, a platform-dependent feature.

                   S_ISENFMT($mode) S_ISWHT($mode)

               See your native chmod(2) and stat(2) documentation
               for more details about the S_* constants.


Perl5リファレンスに戻る