STAT(2) — SYSTEM CALLS
NAME
stat, lstat, fstat − get file status
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
int stat(path, buf)
char ∗path;
struct stat ∗buf;
int lstat(path, buf)
char ∗path;
struct stat ∗buf;
int fstat(fd, buf)
int fd;
struct stat ∗buf;
DESCRIPTION
stat() obtains information about the file named by 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 searchable.
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 the argument descriptor, such as would be obtained by an open(2V) call.
buf is a pointer to a stat() structure into which information is placed concerning the file. A stat() structure includes the following members:
dev_tst_dev;/∗ device file resides on ∗/
ino_tst_ino;/∗ this file’s number ∗/
u_shortst_mode;/∗ protection ∗/
shortst_nlink;/∗ number of hard links to the file ∗/
shortst_uid;/∗ user ID of owner ∗/
shortst_gid;/∗ group ID of owner ∗/
dev_tst_rdev;/∗ the device identifier (special files only)∗/
off_tst_size;/∗ total size of file, in bytes ∗/
time_tst_atime;/∗ file data last access time ∗/
time_tst_mtime;/∗ file data last modify time ∗/
time_tst_ctime;/∗ file data last status change time ∗/
longst_blksize;/∗ preferred blocksize for file system I/O∗/
longst_blocks;/∗ actual number of blocks allocated ∗/
st_atime Time when file data was last accessed. This can also be set explicitly by utimes(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 file data was last modified. This can also be set explicitly by utimes(2). It is not set by changes of owner, group, link count, or mode.
st_ctime Time when file status was last changed. It is set both both by writing and changing the file status information, such as changes of owner, group, link count, or mode.
The status information word st_mode has bits:
#define S_IFMT0170000/∗ type of file ∗/
#define S_IFIFO0010000/∗ FIFO special ∗/
#define S_IFCHR0020000/∗ character special ∗/
#define S_IFDIR0040000/∗ directory ∗/
#define S_IFBLK0060000/∗ block special ∗/
#define S_IFREG0100000/∗ regular file ∗/
#define S_IFLNK0120000/∗ symbolic link ∗/
#define S_IFSOCK0140000/∗ socket ∗/
For more infomation on st_mode bits see chmod(2).
The mode bits 0000070 and 0000007 encode group and others permissions (see chmod(2)).
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.
ERRORS
stat() and lstat() will fail if one or more of the following are true:
ENOTDIR A component of the path prefix of path is not a directory.
ENAMETOOLONG The length of a component of path exceeds 255 characters, or the length of path exceeds 1023 characters.
ENOENT The file referred to by path does not exist.
EACCES Search permission is denied for a component of the path prefix of path.
ELOOP Too many symbolic links were encountered in translating path.
EFAULT buf or path points to an invalid address.
EIO An I/O error occurred while reading from or writing to the file system.
fstat() will fail if one or more of the following are true:
EBADF fd is not a valid open file descriptor.
EFAULT buf points to an invalid address.
EIO An I/O error occurred while reading from or writing to the file system.
WARNINGS
The st_atime and st_mtime fields of the stat() are not contiguous. Programs that depend on them being contiguous (in calls to utimes(2) or utime(3C)) will not work.
SEE ALSO
chmod(2), chown(2), link(2), open(2V), read(2V), readlink(2), rename(2), truncate(2), unlink(2), utimes(2), write(2V)
Sun Release 4.0 — Last change: 25 March 1989