Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

chmod(2)

chown(2)

utimes(2)



STAT(2)                 COMMAND REFERENCE                 STAT(2)



NAME
     stat, lstat, fstat - get file status

SYNOPSIS
     #include <sys/types.h>
     #include <sys/stat.h>

     stat(path, buf)
     char *path;
     struct stat *buf;

     lstat(path, buf)
     char *path;
     struct stat *buf;

     fstat(fd, buf)
     int fd;
     struct stat *buf;

DESCRIPTION
     Stat obtains information about the file path.  Read, write
     or execute permission of the named file is not required, but
     all directories listed in the path name leading to the file
     must be reachable.

     Lstat is like stat except in the case where the named file
     is a symbolic link, in which case lstat returns information
     about the link, while stat returns information about the
     file the link references.

     Fstat obtains the same information about an open file
     referenced by fd, such as would be obtained by an open call.

     Buf is a pointer to a stat structure into which information
     is placed concerning the file.  The structure is defined in
     <sys/stat.h> as:

          struct stat {
             dev_t   st_dev;     /* ID of device containing a directory entry */
                                 /* for this file */
             ino_t   st_ino;     /* this inode's number */
             u_short st_mode;    /* file mode; see below */
             short   st_nlink;   /* number of hard links to the file */
             short   st_uid;     /* user ID of the file's owner */
             short   st_gid;     /* group ID of the file's group */
             dev_t   st_rdev;    /* ID of device -- this entry is defined only */
                                 /* for character special or block special files */
             off_t   st_size;    /* total size of file */
             time_t  st_atime;   /* time of last access */
             int     st_spare1;
             time_t  st_mtime;   /* time of last data modification */
             int     st_spare2;



Printed 10/17/86                                                1





STAT(2)                 COMMAND REFERENCE                 STAT(2)



             time_t  st_ctime;   /* time of last file status change */
             int     st_spare3;
             long    st_blksize; /* optimal blocksize for file system I/O ops */
             long    st_blocks;  /* actual number of blocks allocated */
             long    st_hostid;  /* hostid of machine where file is located */
             long    st_spare4;
              };

     st_atime    Time when file data was last read or modified.
                 Changed by the following system calls:
                 mknod(2), utimes(2), and read(2).  For reasons
                 of efficiency, st_atime is not set when a
                 directory is searched, although this would be
                 more logical.

     st_mtime    Time when data was last modified.  It is not set
                 by changes of owner, group, link count, or mode.
                 Changed by the following system calls:
                 mknod(2), utimes(2), write(2).

     st_ctime    Time when file status was last changed.  It is
                 set both both by writing and changing the i-
                 node.  Changed by the following system calls:
                 chmod(2) chown(2), link(2), mknod(2), rename(2),
                 unlink(2), utimes(2), write(2).

     The status information word st_mode has these bits:

          #define S_IFMT    0170000   /* type of file */
          #define S_IFDIR   0040000   /* directory */
          #define S_IFCHR   0020000   /* character special */
          #define S_IFBLK   0060000   /* block special */
          #define S_IFREG   0100000   /* regular */
          #define S_IFLNK   0120000   /* symbolic link */
          #define S_IFSOCK  0140000   /* socket */
          #define S_ISUID   0004000   /* set user id on execution */
          #define S_ISGID   0002000   /* set group id on execution */
          #define S_ISVTX   0001000   /* save swapped text even after use */
          #define S_IREAD   0000400   /* read permission, owner */
          #define S_IWRITE  0000200   /* write permission, owner */
          #define S_IEXEC   0000100   /* execute/search permission, owner */

     The mode bits 0000070 and 0000007 encode group and others
     permissions (see chmod(2)).

     When fd is associated with a pipe, fstat reports an ordinary
     file with an i-node number, restricted permissions, and a
     not necessarily meaningful length.

DIAGNOSTICS
     Stat and lstat will fail if one or more of the following are
     true:



Printed 10/17/86                                                2





STAT(2)                 COMMAND REFERENCE                 STAT(2)



     [ENOTDIR]
         A component of the path prefix is not a directory.

     [ENOASCII]
         The pathname contains a character with the high-order
         bit set.

     [ENAMETOOLONG]
         The pathname is too long.

     [ENOENT]
         The named file does not exist.

     [EACCES]
         Search permission is denied for a component of the path
         prefix.  If the file is located on a remote host, this
         error code will be returned if the local host name and
         local user name does not appear in /usr/lib/dfs/access
         on the remote machine.  See access(dfs)(5n).

     [EFAULT]
         Buf or path points to an invalid address.

     [ELOOP]
         Too many symbolic links were encountered in translating
         the pathname.

     [EIO]
         An I/O error occurred while reading from or writing to
         the file system.

     Fstat will fail if one of the following are true:

     [EBADF]
         Fd is not a valid open file descriptor.

     [EDFSNOSUCHHOST]
         The pathname referenced a remote host, but when we
         broadcast a request for its address, no host responded.

     [EIO]
         An I/O error occurred while reading from or writing to
         the file system.

RETURN VALUE
     Upon successful completion a value of 0 is returned.
     Otherwise, a value of -1 is returned and errno is set to
     indicate the error.

CAVEATS
     The fields in the stat structure currently marked st_spare1,
     st_spare2, and st_spare3 are present in preparation for



Printed 10/17/86                                                3





STAT(2)                 COMMAND REFERENCE                 STAT(2)



     inode time stamps expanding to 64 bits.  This, however, can
     break certain programs which depend on the time stamps being
     contiguous (in calls to utimes(2)).

     Applying fstat to a socket returns a zeroed buffer.

SEE ALSO
     chmod(2), chown(2), utimes(2).















































Printed 10/17/86                                                4



%%index%%
na:72,72;
sy:144,1219;
de:1363,1929;3436,2614;
di:6050,209;6403,1340;
rv:7743,235;
ca:7978,225;8347,273;
se:8620,169;
%%index%%000000000151

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026