Annotation of 43BSDReno/lib/libc/sys/stat.2, revision 1.1.1.1

1.1       root        1: .\" Copyright (c) 1980 Regents of the University of California.
                      2: .\" All rights reserved.  The Berkeley software License Agreement
                      3: .\" specifies the terms and conditions for redistribution.
                      4: .\"
                      5: .\"    @(#)stat.2      6.8 (Berkeley) 8/21/89
                      6: .\"
                      7: .TH STAT 2 "August 21, 1989"
                      8: .UC 4
                      9: .SH NAME
                     10: stat, lstat, fstat \- get file status
                     11: .SH SYNOPSIS
                     12: .nf
                     13: .ft B
                     14: #include <sys/types.h>
                     15: #include <sys/stat.h>
                     16: .PP
                     17: .ft B
                     18: stat(path, buf)
                     19: char *path;
                     20: struct stat *buf;
                     21: .PP
                     22: .ft B
                     23: lstat(path, buf)
                     24: char *path;
                     25: struct stat *buf;
                     26: .PP
                     27: .ft B
                     28: fstat(fd, buf)
                     29: int fd;
                     30: struct stat *buf;
                     31: .fi
                     32: .ft R
                     33: .SH DESCRIPTION
                     34: .I Stat
                     35: obtains information about the file
                     36: .IR path .
                     37: Read, write or execute
                     38: permission of the named file is not required, but all directories
                     39: listed in the path name leading to the file must be reachable.
                     40: .PP
                     41: .I Lstat
                     42: is like \fIstat\fP except in the case where the named file is a symbolic link,
                     43: in which case
                     44: .I lstat
                     45: returns information about the link,
                     46: while
                     47: .I stat
                     48: returns information about the file the link references.
                     49: .PP
                     50: .I Fstat
                     51: obtains the same information about an open file
                     52: referenced by the argument descriptor, such as would
                     53: be obtained by an
                     54: .I open
                     55: call.
                     56: .PP
                     57: .I Buf
                     58: is a pointer to a
                     59: .I stat
                     60: structure into which information is placed concerning the file.
                     61: The contents of the structure pointed to by
                     62: .IR buf :
                     63: .PP
                     64: .nf
                     65:     struct stat {
                     66:         dev_t    st_dev;      /* device inode resides on */
                     67:         ino_t    st_ino;      /* inode's number */
                     68:         u_short  st_mode;     /* inode protection mode */
                     69:         short    st_nlink;    /* number or hard links to the file */
                     70:         uid_t    st_uid;      /* user-id of owner */
                     71:         gid_t    st_gid;      /* group-id of owner */
                     72:         dev_t    st_rdev;     /* device type, for special file inode */
                     73:         off_t    st_size;     /* file size, in bytes */
                     74:         time_t   st_atime;    /* time of last access */
                     75:         int      st_spare1;
                     76:         time_t   st_mtime;    /* time of last data modification */
                     77:         int      st_spare2;
                     78:         time_t   st_ctime;    /* time of last file status change */
                     79:         int      st_spare3;
                     80:         long     st_blksize;  /* optimal file system I/O ops blocksize */
                     81:         long     st_blocks;   /* blocks allocated for file */
                     82:         u_long   st_flags;    /* user defined flags for file */
                     83:         u_long   st_gen;      /* file generation number */
                     84:     };
                     85: .fi
                     86: .DT
                     87: .PP
                     88: .TP
                     89: st_atime
                     90: Time when file data was last accessed.  Changed by the following system
                     91: calls:
                     92: .IR mknod (2),
                     93: .IR utimes (2),
                     94: and
                     95: .IR read (2).
                     96: For reasons of efficiency, 
                     97: st_atime is not set when a directory
                     98: is searched, although this would be more logical.
                     99: .TP
                    100: st_mtime
                    101: Time when data was last modified.
                    102: It is not set by changes of owner, group, link count, or mode.
                    103: Changed by the following system calls:
                    104: .IR mknod (2),
                    105: .IR utimes (2),
                    106: .IR write (2).
                    107: .TP
                    108: st_ctime
                    109: Time when file status was last changed.
                    110: It is set both both by writing and changing the i-node.
                    111: Changed by the following system calls:
                    112: .IR chmod (2)
                    113: .IR chown (2),
                    114: .IR link (2),
                    115: .IR mknod (2),
                    116: .IR rename (2),
                    117: .IR unlink (2),
                    118: .IR utimes (2),
                    119: .IR write (2).
                    120: .TP
                    121: st_blocks
                    122: The actual number of blocks allocated for the file in 512-byte units.
                    123: .PP
                    124: The status information word \fIst_mode\fP has bits:
                    125: .nf
                    126: .in +5n
                    127: .ta 1.6i 2.5i 3i
                    128: #define S_IFMT 0170000 /* type of file */
                    129: #define\ \ \ \ S_IFDIR 0040000 /* directory */
                    130: #define\ \ \ \ S_IFCHR 0020000 /* character special */
                    131: #define\ \ \ \ S_IFBLK 0060000 /* block special */
                    132: #define\ \ \ \ S_IFREG 0100000 /* regular */
                    133: #define\ \ \ \ S_IFLNK 0120000 /* symbolic link */
                    134: #define\ \ \ \ S_IFSOCK        0140000 /* socket */
                    135: #define S_ISUID        0004000 /* set user id on execution */
                    136: #define S_ISGID        0002000 /* set group id on execution */
                    137: #define S_ISVTX        0001000 /* save swapped text even after use */
                    138: #define S_IREAD        0000400 /* read permission, owner */
                    139: #define S_IWRITE       0000200 /* write permission, owner */
                    140: #define S_IEXEC        0000100 /* execute/search permission, owner */
                    141: .fi
                    142: .in -5n
                    143: .PP
                    144: The mode bits 0000070 and 0000007 encode group and
                    145: others permissions (see
                    146: .IR chmod (2)).
                    147: .SH "RETURN VALUE
                    148: Upon successful completion a value of 0 is returned.
                    149: Otherwise, a value of \-1 is returned and
                    150: .I errno
                    151: is set to indicate the error.
                    152: .SH "ERRORS
                    153: .I Stat
                    154: and
                    155: .I lstat
                    156: will fail if one or more of the following are true:
                    157: .TP 15
                    158: [ENOTDIR]
                    159: A component of the path prefix is not a directory.
                    160: .TP 15
                    161: [EINVAL]
                    162: The pathname contains a character with the high-order bit set.
                    163: .TP 15
                    164: [ENAMETOOLONG]
                    165: A component of a pathname exceeded 255 characters,
                    166: or an entire path name exceeded 1023 characters.
                    167: .TP 15
                    168: [ENOENT]
                    169: The named file does not exist.
                    170: .TP 15
                    171: [EACCES]
                    172: Search permission is denied for a component of the path prefix.
                    173: .TP 15
                    174: [ELOOP]
                    175: Too many symbolic links were encountered in translating the pathname.
                    176: .TP 15
                    177: [EFAULT]
                    178: .I Buf
                    179: or
                    180: .I name
                    181: points to an invalid address.
                    182: .TP 15
                    183: [EIO]
                    184: An I/O error occurred while reading from or writing to the file system.
                    185: .PP
                    186: .I Fstat
                    187: will fail if one or both of the following are true:
                    188: .TP 15
                    189: [EBADF]
                    190: .I Fildes
                    191: is not a valid open file descriptor.
                    192: .TP 15
                    193: [EFAULT]
                    194: .I Buf
                    195: points to an invalid address.
                    196: .TP 15
                    197: [EIO]
                    198: An I/O error occurred while reading from or writing to the file system.
                    199: .SH CAVEAT
                    200: The fields in the stat structure currently marked 
                    201: .IR st_spare1 ,
                    202: .IR st_spare2 ,
                    203: and
                    204: .I st_spare3
                    205: are present in preparation for inode time stamps expanding
                    206: to 64 bits.  This, however, can break certain programs that
                    207: depend on the time stamps being contiguous (in calls to
                    208: .IR utimes (2)).
                    209: .SH "SEE ALSO"
                    210: chmod(2), chown(2), utimes(2)
                    211: .SH BUGS
                    212: Applying
                    213: .I fstat
                    214: to a socket (and thus to a pipe)
                    215: returns a zero'd buffer,
                    216: except for the blocksize field,
                    217: and a unique device and inode number.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.