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
     The command 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.

     The lstat command 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.

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

     A pointer buf points 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 */



Printed 5/12/88                                                 1





STAT(2)                 COMMAND REFERENCE                 STAT(2)



        int       st_spare1;
        time_t    st_mtime;      /* time of last data modification */
        int       st_spare2;
        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_spare4[2];
     };


     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 inode.
             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)).




Printed 5/12/88                                                 2





STAT(2)                 COMMAND REFERENCE                 STAT(2)



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

DIAGNOSTICS
     The commands stat and lstat fail if one or more of the
     following are true:

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

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

     [ENAMETOOLONG] The path name is too long.

     [ENOENT]       The named file does not exist.

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

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

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

     The fstat command fails if one of the following are true:

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

     [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
     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), and utimes(2).






Printed 5/12/88                                                 3



%%index%%
na:240,88;
sy:328,1867;
de:2195,2070;4577,2390;7279,223;
di:7502,1189;
rv:8691,279;
ca:8970,540;
se:9510,160;
%%index%%000000000143

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