.\"
.\" @(#)stat.2 8.3 (Berkeley) 4/19/94
.\"
-.Dd April 19, 1994
+.Dd May 15, 2008
.Dt STAT 2
.Os BSD 4
.Sh NAME
-.Nm stat ,
+.Nm fstat ,
+.Nm fstat64 ,
.Nm lstat ,
-.Nm fstat
+.Nm lstat64 ,
+.Nm stat ,
+.Nm stat64
.Nd get file status
.Sh SYNOPSIS
-.Fd #include <sys/types.h>
.Fd #include <sys/stat.h>
.Ft int
-.Fn stat "const char *path" "struct stat *sb"
+.Fo fstat
+.Fa "int fildes"
+.Fa "struct stat *buf"
+.Fc
+.Ft int
+.Fo lstat
+.Fa "const char *restrict path"
+.Fa "struct stat *restrict buf"
+.Fc
.Ft int
-.Fn lstat "const char *path" "struct stat *sb"
+.Fo stat
+.Fa "const char *restrict path"
+.Fa "struct stat *restrict buf"
+.Fc
+.Sh TRANSITIIONAL SYNOPSIS (NOW DEPRECATED)
+.Ft int
+.br
+.Fo fstat64
+.Fa "int fildes"
+.Fa "struct stat64 *buf"
+.Fc ;
+.sp
.Ft int
-.Fn fstat "int fd" "struct stat *sb"
+.br
+.Fo lstat64
+.Fa "const char *restrict path"
+.Fa "struct stat64 *restrict buf"
+.Fc ;
+.sp
+.Ft int
+.br
+.Fo stat64
+.Fa "const char *restrict path"
+.Fa "struct stat64 *restrict buf"
+.Fc ;
.Sh DESCRIPTION
-The
-.Fn stat
+The
+.Fn stat
function obtains information about the file pointed to by
.Fa 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.
.Pp
-.Fn Lstat
+The
+.Fn lstat
+function
is like
.Fn stat
-except in the case where the named file is a symbolic link,
-in which case
+except in the case where the named file is a symbolic link;
.Fn lstat
returns information about the link,
while
.Fn stat
returns information about the file the link references.
Unlike other filesystem objects,
-symbolic links do not have an owner, group, access mode, times, etc.
-Instead, these attributes are taken from the directory that
+symbolic links may not have an owner, group, access mode, times, etc.
+Instead, these attributes may be taken from the directory that
contains the link.
-The only attributes returned from an
+In this case, the only attributes returned from an
.Fn lstat
that refer to the symbolic link itself are the file type (S_IFLNK),
size, blocks, and link count (always 1).
.Fn fstat
obtains the same information about an open file
known by the file descriptor
-.Fa fd .
+.Fa fildes .
.Pp
The
-.Fa sb
+.Fa buf
argument is a pointer to a
-.Fn stat
-structure
+.Fa stat
+structure
as defined by
.Aq Pa sys/stat.h
-(shown below)
and into which information is placed concerning the file.
+When the macro
+.Dv _DARWIN_FEATURE_64_BIT_INODE
+is not defined (the
+.Ft ino_t
+type is 32-bits), the
+.Fa stat
+structure is defined as:
.Bd -literal
-struct stat {
+struct stat { /* when _DARWIN_FEATURE_64_BIT_INODE is NOT defined */
dev_t st_dev; /* device inode resides on */
ino_t st_ino; /* inode's number */
mode_t st_mode; /* inode protection mode */
};
.Ed
.Pp
+However, when the macro
+.Dv _DARWIN_FEATURE_64_BIT_INODE
+is defined, the
+.Ft ino_t
+type will be 64-bits (force 64-bit inode mode by defining the
+.Dv _DARWIN_USE_64_BIT_INODE
+macro before including header files).
+This will cause symbol variants of the
+.Fa stat
+family, with the
+.Fa $INODE64
+suffixes, to be automatically linked in.
+In addition, the
+.Fa stat
+structure will now be defined as:
+.Bd -literal
+struct stat { /* when _DARWIN_FEATURE_64_BIT_INODE is defined */
+ dev_t st_dev; /* ID of device containing file */
+ mode_t st_mode; /* Mode of file (see below) */
+ nlink_t st_nlink; /* Number of hard links */
+ ino_t st_ino; /* File serial number */
+ uid_t st_uid; /* User ID of the file */
+ gid_t st_gid; /* Group ID of the file */
+ dev_t st_rdev; /* Device ID */
+ struct timespec st_atimespec; /* time of last access */
+ struct timespec st_mtimespec; /* time of last data modification */
+ struct timespec st_ctimespec; /* time of last status change */
+ struct timespec st_birthtimespec; /* time of file creation(birth) */
+ off_t st_size; /* file size, in bytes */
+ blkcnt_t st_blocks; /* blocks allocated for file */
+ blksize_t st_blksize; /* optimal blocksize for I/O */
+ uint32_t st_flags; /* user defined flags for file */
+ uint32_t st_gen; /* file generation number */
+ int32_t st_lspare; /* RESERVED: DO NOT USE! */
+ int64_t st_qspare[2]; /* RESERVED: DO NOT USE! */
+};
+.Ed
+.Pp
The time-related fields of
.Fa struct stat
are as follows:
-.Bl -tag -width XXXst_mtime
+.Bl -tag -width XXXst_birthtime
.It st_atime
Time when file data last accessed.
Changed by the
and
.Xr write 2
system calls.
+.It st_birthtime
+Time of file creation. Only set once when the file is created. This field is
+only available in the 64 bit inode variants. On filesystems where birthtime is
+not available, this field holds the
+.Fa ctime
+instead.
.El
.Pp
-The size-related fields of the
-.Fa struct stat
-are as follows:
+The size-related fields of the structures are as follows:
.Bl -tag -width XXXst_blksize
.It st_blksize
The optimal I/O block size for the file.
.Xr access 2
and
.Xr chmod 2 .
+.Pp
+For a list of the file flags in the
+.Fa st_flags
+field, see
+.Aq Pa sys/stat.h
+and
+.Xr chflags 2 .
.Sh RETURN VALUES
Upon successful completion a value of 0 is returned.
Otherwise, a value of -1 is returned and
.Li st_blocks
fields.
.Sh ERRORS
-.Fn Stat
-and
+.Bl -tag -width Er
+The
+.Fn fstat
+system call will fail if:
+.\" ===========
+.It Bq Er EBADF
+.Fa fildes
+is not a valid open file descriptor.
+.\" ===========
+.It Bq Er EFAULT
+.Fa Sb
+points to an invalid address.
+.\" ===========
+.It Bq Er EIO
+An I/O error occurs while reading from or writing to the file system.
+.El
+.Pp
+The
.Fn lstat
-will fail if:
+and
+.Fn stat
+system calls will fail if:
.Bl -tag -width Er
-.It Bq Er ENOTDIR
-A component of the path prefix is not a directory.
-.It Bq Er ENAMETOOLONG
-A component of a pathname exceeded
-.Dv {NAME_MAX}
-characters, or an entire path name exceeded
-.Dv {PATH_MAX}
-characters.
-.It Bq Er ENOENT
-The named file does not exist.
+.\" ===========
.It Bq Er EACCES
Search permission is denied for a component of the path prefix.
-.It Bq Er ELOOP
-Too many symbolic links were encountered in translating the pathname.
+.\" ===========
.It Bq Er EFAULT
.Fa Sb
or
.Em name
points to an invalid address.
+.\" ===========
.It Bq Er EIO
-An I/O error occurred while reading from or writing to the file system.
+An I/O error occurs while reading from or writing to the file system.
+.\" ===========
+.It Bq Er ELOOP
+Too many symbolic links are encountered in translating the pathname.
+This is taken to be indicative of a looping symbolic link.
+.\" ===========
+.It Bq Er ENAMETOOLONG
+A component of a pathname exceeds
+.Dv {NAME_MAX}
+characters, or an entire path name exceeds
+.Dv {PATH_MAX}
+characters.
+.\" ===========
+.It Bq Er ENOENT
+The named file does not exist.
+.\" ===========
+.It Bq Er ENOTDIR
+A component of the path prefix is not a directory.
.El
.Pp
+The
+.Fn fstat ,
+.Fn lstat ,
+and
+.Fn stat
+system calls will fail if:
.Bl -tag -width Er
-.Fn Fstat
-will fail if:
-.It Bq Er EBADF
-.Fa fd
-is not a valid open file descriptor.
-.It Bq Er EFAULT
-.Fa Sb
-points to an invalid address.
-.It Bq Er EIO
-An I/O error occurred while reading from or writing to the file system.
+.\" ===========
+.It Bq Er EOVERFLOW
+The file size in bytes
+or the number of blocks allocated to the file
+or the file serial number cannot be represented correctly
+in the structure pointed to by
+.Fa buf .
.El
.Sh CAVEATS
The file generation number,
to 64 bits. This, however, can break certain programs that
depend on the time stamps being contiguous (in calls to
.Xr utimes 2 ) .
+.Sh TRANSITIONAL DESCRIPTION (NOW DEPRECATED)
+The
+.Fa fstat64 ,
+.Fa lstat64
+and
+.Fa stat64
+routines are equivalent to their corresponding non-64-suffixed routine,
+when 64-bit inodes are in effect.
+They were added before there was support for the symbol variants, and so are
+now deprecated.
+Instead of using these, set the
+.Dv _DARWIN_USE_64_BIT_INODE
+macro before including header files to force 64-bit inode support.
+.Pp
+The
+.Fa stat64
+structure used by these deprecated routines is the same as the
+.Fa stat
+structure when 64-bit inodes are in effect (see above).
.Sh SEE ALSO
+.Xr chflags 2 ,
.Xr chmod 2 ,
.Xr chown 2 ,
-.Xr utimes 2
+.Xr utimes 2 ,
+.Xr compat 5 ,
.Xr symlink 7
.Sh BUGS
Applying
.Fn lstat
function call appeared in
.Bx 4.2 .
+The
+.Fn stat64 ,
+.Fn fstat64 ,
+and
+.Fn lstat64
+system calls first appeared in Mac OS X 10.5 (Leopard) and are now deprecated
+in favor of the corresponding symbol variants.