| |
include("http://www.linux-faqs.com/body.left.inc") ?>

|
|
Name
stat, fstat, lstat — get file status
Synopsis
int
stat( |
const char * |
path, |
| |
struct stat * |
buf); |
int
fstat( |
int |
filedes, |
| |
struct stat * |
buf); |
int
lstat( |
const char * |
path, |
| |
struct stat * |
buf); |
DESCRIPTION
These functions return information about a file. No
permissions are required on the file itself, but — in
the case of stat() and
lstat() — execute
(search) permission is required on all of the directories in
path that lead to the
file.
stat() stats the file
pointed to by path
and fills in buf.
lstat() is identical to
stat(), except that if
path is a symbolic
link, then the link itself is stat-ed, not the file that it
refers to.
fstat() is identical to
stat(), except that the file to
be stat-ed is specified by the file descriptor filedes.
All of these system calls return a stat structure, which contains the
following fields:
| struct |
stat { |
| |
dev_t |
|
st_dev; |
/* ID of device containing file */ |
| |
ino_t |
|
st_ino; |
/* inode number */ |
| |
mode_t |
|
st_mode; |
/* protection */ |
| |
nlink_t |
|
st_nlink; |
/* number of hard links */ |
| |
uid_t |
|
st_uid; |
/* user ID of owner */ |
| |
gid_t |
|
st_gid; |
/* group ID of owner */ |
| |
dev_t |
|
st_rdev; |
/* device ID (if special file) */ |
| |
off_t |
|
st_size; |
/* total size, in bytes */ |
| |
blksize_t |
|
st_blksize; |
/* blocksize for filesystem I/O */ |
| |
blkcnt_t |
|
st_blocks; |
/* number of blocks allocated */ |
| |
time_t |
|
st_atime; |
/* time of last access */ |
| |
time_t |
|
st_mtime; |
/* time of last modification */ |
| |
time_t |
|
st_ctime; |
/* time of last status change */ |
| }; |
The st_dev field
describes the device on which this file resides.
The st_rdev
field describes the device that this file (inode)
represents.
The st_size
field gives the size of the file (if it is a regular file or
a symbolic link) in bytes. The size of a symlink is the
length of the pathname it contains, without a trailing null
byte.
The st_blocks
field indicates the number of blocks allocated to the file,
512-byte units. (This may be smaller than st_size/512, for example,
when the file has holes.)
The st_blksize
field gives the "preferred" blocksize for efficient file
system I/O. (Writing to a file in smaller chunks may cause an
inefficient read-modify-rewrite.)
Not all of the Linux filesystems implement all of the time
fields. Some file system types allow mounting in such a way
that file accesses do not cause an update of the st_atime field. (See
`noatime' in mount(8).)
The field st_atime is changed by file
accesses, e.g. by execve(2), mknod(2), pipe(2), utime(2) and read(2) (of more than zero
bytes). Other routines, like mmap(2), may or may not
update st_atime.
The field st_mtime is changed by file
modifications, e.g. by mknod(2), truncate(2), utime(2) and write(2) (of more than zero
bytes). Moreover, st_mtime of a directory is
changed by the creation or deletion of files in that
directory. The st_mtime field is not changed for changes in
owner, group, hard link count, or mode.
The field st_ctime is changed by
writing or by setting inode information (i.e., owner, group,
link count, mode, etc.).
The following POSIX macros are defined to check the file
type using the st_mode field:
- S_ISREG(m)
-
is it a regular file?
- S_ISDIR(m)
-
directory?
- S_ISCHR(m)
-
character device?
- S_ISBLK(m)
-
block device?
- S_ISFIFO(m)
-
FIFO (named pipe)?
- S_ISLNK(m)
-
symbolic link? (Not in POSIX.1-1996.)
- S_ISSOCK(m)
-
socket? (Not in POSIX.1-1996.)
The following flags are defined for the st_mode field:
The set-group-ID bit (S_ISGID) has several special uses.
For a directory it indicates that BSD semantics is to be used
for that directory: files created there inherit their group
ID from the directory, not from the effective group ID of the
creating process, and directories created there will also get
the S_ISGID bit set. For a file that does not have the group
execution bit (S_IXGRP) set, the set-group-ID bit indicates
mandatory file/record locking.
The `sticky' bit (S_ISVTX) on a directory means that a
file in that directory can be renamed or deleted only by the
owner of the file, by the owner of the directory, and by a
privileged process.
RETURN VALUE
On success, zero is returned. On error, −1 is
returned, and errno is set
appropriately.
ERRORS
- EACCES
-
Search permission is denied for one of the
directories in the path prefix of path. (See also path_resolution(7).)
- EBADF
-
filedes is
bad.
- EFAULT
-
Bad address.
- ELOOP
-
Too many symbolic links encountered while traversing
the path.
- ENAMETOOLONG
-
File name too long.
- ENOENT
-
A component of the path path does not exist, or
the path is an empty string.
- ENOMEM
-
Out of memory (i.e. kernel memory).
- ENOTDIR
-
A component of the path is not a directory.
CONFORMING TO
These system calls conform to SVr4, 4.3BSD,
POSIX.1-2001.
Use of the st_blocks and st_blksize fields may be less
portable. (They were introduced in BSD. The interpretation
differs between systems, and possibly on a single system when
NFS mounts are involved.)
POSIX does not describe the S_IFMT, S_IFSOCK, S_IFLNK,
S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX bits,
but instead demands the use of the macros S_ISDIR(), etc. The
S_ISLNK and S_ISSOCK macros are not in POSIX.1-1996, but both
are present in POSIX.1-2001; the former is from SVID 4, the
latter from SUSv2.
Unix V7 (and later systems) had S_IREAD, S_IWRITE,
S_IEXEC, where POSIX prescribes the synonyms S_IRUSR,
S_IWUSR, S_IXUSR.
Other Systems
Values that have been (or are) in use on various
systems:
A sticky command appeared in Version 32V AT&T
UNIX.
NOTES
Linux Notes
Since kernel 2.5.48, the stat structure supports nanosecond
resolution for the three file timestamp fields. Glibc
exposes the nanosecond component of each field using names
either of the form st_atim.tv_nsec, if the
_BSD_SOURCE or _SVID_SOURCE feature test macro is defined,
or of the form st_atimensec, if neither of
these macros is defined. On file systems that do not
support sub-second timestamps, these nanosecond fields are
returned with the value 0.
For most files under the /proc directory, stat() does not return the file size in
the st_size
field; instead the field is returned with the value 0.
EXAMPLE
The following program calls stat(2) and displays
selected fields in the returned stat structure.
SEE ALSO
access(2), chmod(2), chown(2), fstatat(2), readlink(2), utime(2), capabilities(7)
t
Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95
and Copyright (c) 2007 Michael Kerrisk <mtk-manpages@gmx.net>
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
Since the Linux kernel and libraries are constantly changing, this
manual page may be incorrect or out-of-date. The author(s) assume no
responsibility for errors or omissions, or for damages resulting from
the use of the information contained herein. The author(s) may not
have taken the same level of care in the production of this manual,
which is licensed free of charge, as they might when working
professionally.
Formatted or processed versions of this manual, if unaccompanied by
the source, must acknowledge the copyright and authors of this work.
Modified by Michael Haardt <michael@moria.de>
Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
Modified 1995-05-18 by Todd Larason <jtl@molehill.org>
Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
Modified 1995-01-09 by Richard Kettlewell <richard@greenend.org.uk>
Modified 1998-05-13 by Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
Modified 1999-07-06 by aeb & Albert Cahalan
Modified 2000-01-07 by aeb
Modified 2004-06-23 by Michael Kerrisk <mtk-manpages@gmx.net>
2007-06-08 mtk: Added example program
|
|
|
include("http://www.linux-faqs.com/body.right.inc") ?>

|
|