STAT(2) System Calls STAT(2)
NAME
stat, lstat, fstat - get file status
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
int stat (const char *path, struct stat *sb);
int lstat (const char *path, struct stat *sb);
int fstat (int fd, struct stat *sb);
DESCRIPTION
These calls are used to retrieve status information about files. They
do much the same think as the GS/OS call GetFileInfoGS, except that
they return the information in a format compatible with Unix's stat
calls, and also provide information about sockets and GNO character de‐
vices.
The stat function obtains information about the file pointed to by
path. Read, write or execute permission of the named file is not re‐
quired, 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 sym‐
bolic link, in which case lstat returns information about the link,
while stat returns information about the file the link references. Un‐
like other filesystem objects, symbolic links do not have an owner,
group, access mode, times, etc. Instead, these attributes are taken
from the directory that contains the link. The only attributes re‐
turned from an lstat that refer to the symbolic link itself are the
file type (S_IFLNK), size, blocks, and link count (always 1).
The fstat obtains the same information about an open file known by the
file descriptor fd.
The sb argument is a pointer to a stat structure as defined by
<sys/stat.h> (shown below) and into which information is placed con‐
cerning the file.
struct stat {
dev_t st_dev; /* device inode resides on */
ino_t st_ino; /* inode's number */
mode_t st_mode; /* inode protection mode */
nlink_t st_nlink; /* number or hard links to the file */
uid_t st_uid; /* user-id of owner */
gid_t st_gid; /* group-id of owner */
dev_t st_rdev; /* device type, for special file inode */
off_t st_size; /* file size, in bytes */
time_t st_atime; /* time of last access (GNO: same as st_mtime) */
int st_spare1; /* reserved */
time_t st_mtime; /* time of last data modification */
int st_spare2; /* reserved */
time_t st_ctime; /* time of last file status change */
int st_spare3; /* reserved */
long st_blksize;/* size in bytes of blocks on filesystem */
long st_blocks; /* blocks allocated for file */
long st_spare4[2]; /* reserved */
}
The items marked 'reserved' are not currently used but are reserved for
future expansion; do not use these fields for any reason. st_dev is
the number of the device on which the file resides. This number is the
same as the GS/OS device ID number. st_rdev is not currently used, but
may in the future designate a device type code.
As short symbolic links are stored in the inode, st_blocks may be zero.
The status information word st_mode has the following bits:
#define S_IFCHR 0020000 /* character special */
#define S_IFDIR 0040000 /* directory */
#define S_IFBLK 0060000 /* block special */
#define S_IFREG 0100000 /* regular */
#define S_IFLNK 0120000 /* symbolic link */
#define S_IFSOCK 0140000 /* socket */
#define S_IRUSR 0000400 /* read permission, owner */
#define S_IWUSR 0000200 /* write permission, owner */
#define S_IXUSR 0000100 /* execute/search permission, owner */
For a list of access modes, see <sys/stat.h>, access(2) and chmod(2).
RETURN VALUES
Upon successful completion a value of 0 is returned. Otherwise, a
value of -1 is returned and errno is set to indicate the error.
COMPATIBILITY
BSD uses a larger set of defined fields than does GNO. The types of
the fields also, in general, differ.
The stat man page for GNO v2.0.4 documented the macros S_IREAD,
S_IWRITE, and S_IEXEC. These macros are still available in
<sys/stat.h> provided that _POSIX_SOURCE is not defined.
ERRORS
Stat and lstat will fail if:
ENOTDIR
A component of the path prefix is not a directory.
ENOENT The named file does not exist.
EBADF fd does not refer to an open file.
Fstat will fail if:
EBADF fd is not a valid open file descriptor.
EIO An I/O error occurred while reading from or writing to
the file system.
SEE ALSO
chmod(2), chown(2), utimes(2) symlink(7)
BUGS
GNO does not yet support hard or symbolic file links on the IIgs.
Therefore, lstat operates exactly like stat. If there's a case where
lstat might be more appropriate at a time when links are supported,
then use lstat instead and be ready for the future.
fstat doesn't do anything clever with all the unused fields when its
argument is a pipe or terminal.
STANDARDS
The stat and fstat function calls are close, but do not conform, to
IEEE Std 1003.1-1988 (POSIX). In particular,
- this implementation does not make the distinction of file own‐
ership;
- not all the required error return codes are implemented; and
- file access time mirrors modification time.
HISTORY
An lstat function call appeared in 4.2BSD.
GNO 19 January 1997 STAT(2)
Man(1) output converted with
man2html