STAT(2) UNIX Programmer's Manual STAT(2) NAME stat, lstat, fstat - get file status SYNOPSIS #include #include 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 _S_t_a_t obtains information about the file _p_a_t_h. 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. _L_s_t_a_t is like _s_t_a_t except in the case where the named file is a symbolic link, in which case _l_s_t_a_t returns information about the link, while _s_t_a_t returns information about the file the link references. _F_s_t_a_t obtains the same information about an open file refer- enced by the argument descriptor, such as would be obtained by an _o_p_e_n call. _B_u_f is a pointer to a _s_t_a_t structure into which information is placed concerning the file. The contents of the struc- ture pointed to by _b_u_f struct stat { dev_t st_dev; /* device inode resides on */ ino_t st_ino; /* this inode's number */ u_short st_mode;/* protection */ short st_nlink;/* number or hard links to the file */ short st_uid; /* user-id of owner */ short st_gid; /* group-id of owner */ dev_t st_rdev;/* the device type, for inode that is device */ off_t st_size;/* total size of file */ time_t st_atime;/* file last access time */ int st_spare1; time_t st_mtime;/* file last modify time */ int st_spare2; time_t st_ctime;/* file last status change time */ Printed 11/26/99 May 12, 1986 1 STAT(2) UNIX Programmer's Manual STAT(2) 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: _m_k_n_o_d(2), _u_t_i_m_e_s(2), _r_e_a_d(2), and _w_r_i_t_e(2). For reasons of efficiency, st_atime is not set when a direc- tory 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: _m_k_n_o_d(2), _u_t_i_m_e_s(2), _w_r_i_t_e(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: _c_h_m_o_d(2) _c_h_o_w_n(2), _l_i_n_k(2), _m_k_n_o_d(2), _r_e_n_a_m_e(2), _u_n_l_i_n_k(2), _u_t_i_m_e_s(2), _w_r_i_t_e(2). The status information word _s_t__m_o_d_e has 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 _c_h_m_o_d(2)). RETURN VALUE Upon successful completion a value of 0 is returned. Other- wise, a value of -1 is returned and _e_r_r_n_o is set to indicate the error. ERRORS _S_t_a_t and _l_s_t_a_t will fail if one or more of the following are true: [ENOTDIR] A component of the path prefix is not a Printed 11/26/99 May 12, 1986 2 STAT(2) UNIX Programmer's Manual STAT(2) directory. [EINVAL] The pathname contains a character with the high-order bit set. [ENAMETOOLONG] A component of a pathname exceeded 255 char- acters, or an entire path name exceeded 1023 characters. [ENOENT] The named file does not exist. [EACCES] Search permission is denied for a component of the path prefix. [ELOOP] Too many symbolic links were encountered in translating the pathname. [EFAULT] _B_u_f or _n_a_m_e points to an invalid address. [EIO] An I/O error occurred while reading from or writing to the file system. _F_s_t_a_t will fail if one or both of the following are true: [EBADF] _F_i_l_d_e_s is not a valid open file descriptor. [EFAULT] _B_u_f points to an invalid address. [EIO] An I/O error occurred while reading from or writing to the file system. CAVEAT The fields in the stat structure currently marked _s_t__s_p_a_r_e_1, _s_t__s_p_a_r_e_2, and _s_t__s_p_a_r_e_3 are present in preparation for inode time stamps expanding to 64 bits. This, however, can break certain programs that depend on the time stamps being contiguous (in calls to _u_t_i_m_e_s(2)). SEE ALSO chmod(2), chown(2), utimes(2) BUGS Applying _f_s_t_a_t to a socket (and thus to a pipe) returns a zero'd buffer, except for the blocksize field, and a unique device and inode number. Printed 11/26/99 May 12, 1986 3