]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/stat.2
Minor changes.
[thirdparty/man-pages.git] / man2 / stat.2
CommitLineData
fea681da
MK
1'\" t
2.\" Hey Emacs! This file is -*- nroff -*- source.
3.\"
4.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
5.\" Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95
bc7ff20e 6.\" and Copyright (c) 2007 Michael Kerrisk <mtk-manpages@gmx.net>
fea681da
MK
7.\"
8.\" Permission is granted to make and distribute verbatim copies of this
9.\" manual provided the copyright notice and this permission notice are
10.\" preserved on all copies.
11.\"
12.\" Permission is granted to copy and distribute modified versions of this
13.\" manual under the conditions for verbatim copying, provided that the
14.\" entire resulting derived work is distributed under the terms of a
15.\" permission notice identical to this one.
c13182ef 16.\"
fea681da
MK
17.\" Since the Linux kernel and libraries are constantly changing, this
18.\" manual page may be incorrect or out-of-date. The author(s) assume no
19.\" responsibility for errors or omissions, or for damages resulting from
20.\" the use of the information contained herein. The author(s) may not
21.\" have taken the same level of care in the production of this manual,
22.\" which is licensed free of charge, as they might when working
23.\" professionally.
c13182ef 24.\"
fea681da
MK
25.\" Formatted or processed versions of this manual, if unaccompanied by
26.\" the source, must acknowledge the copyright and authors of this work.
27.\"
28.\" Modified by Michael Haardt <michael@moria.de>
29.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
30.\" Modified 1995-05-18 by Todd Larason <jtl@molehill.org>
31.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
32.\" Modified 1995-01-09 by Richard Kettlewell <richard@greenend.org.uk>
33.\" Modified 1998-05-13 by Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
34.\" Modified 1999-07-06 by aeb & Albert Cahalan
35.\" Modified 2000-01-07 by aeb
305a0578 36.\" Modified 2004-06-23 by Michael Kerrisk <mtk-manpages@gmx.net>
bc7ff20e 37.\" 2007-06-08 mtk: Added example program
c13182ef 38.\"
bc7ff20e 39.TH STAT 2 2007-06-08 "Linux" "Linux Programmer's Manual"
fea681da
MK
40.SH NAME
41stat, fstat, lstat \- get file status
42.SH SYNOPSIS
43.B #include <sys/types.h>
44.br
45.B #include <sys/stat.h>
46.br
47.B #include <unistd.h>
48.sp
da2d9dad 49.BI "int stat(const char *" path ", struct stat *" buf );
fea681da
MK
50.br
51.BI "int fstat(int " filedes ", struct stat *" buf );
52.br
da2d9dad 53.BI "int lstat(const char *" path ", struct stat *" buf );
fea681da
MK
54.SH DESCRIPTION
55.PP
da2d9dad
MK
56These functions return information about a file.
57No permissions are required on the file itself, but \(em in the case of
58.BR stat ()
c13182ef 59and
da2d9dad
MK
60.BR lstat ()
61\(em
62execute (search) permission is required on all of the directories in
63.I path
64that lead to the file.
fea681da 65.PP
da2d9dad 66.BR stat ()
c13182ef 67stats the file pointed to by
da2d9dad 68.I path
fea681da
MK
69and fills in
70.IR buf .
71
da2d9dad 72.BR lstat ()
fea681da 73is identical to
da2d9dad
MK
74.BR stat (),
75except that if
76.I path
77is a symbolic link, then the link itself is stat-ed,
fea681da
MK
78not the file that it refers to.
79
da2d9dad 80.BR fstat ()
fea681da 81is identical to
da2d9dad
MK
82.BR stat (),
83except that the file to be stat-ed is specified by the file descriptor
84.IR filedes .
fea681da 85.PP
da2d9dad 86All of these system calls return a
fea681da
MK
87.I stat
88structure, which contains the following fields:
89.PP
5ae873ff 90.RS 0.25i
fea681da
MK
91.nf
92struct stat {
da2d9dad
MK
93 dev_t st_dev; /* ID of device containing file */
94 ino_t st_ino; /* inode number */
5ae873ff
MK
95 mode_t st_mode; /* protection */
96 nlink_t st_nlink; /* number of hard links */
97 uid_t st_uid; /* user ID of owner */
98 gid_t st_gid; /* group ID of owner */
da2d9dad 99 dev_t st_rdev; /* device ID (if special file) */
5ae873ff
MK
100 off_t st_size; /* total size, in bytes */
101 blksize_t st_blksize; /* blocksize for filesystem I/O */
102 blkcnt_t st_blocks; /* number of blocks allocated */
103 time_t st_atime; /* time of last access */
104 time_t st_mtime; /* time of last modification */
105 time_t st_ctime; /* time of last status change */
fea681da
MK
106};
107.fi
108.RE
109.PP
da2d9dad 110The
29de83af 111.I st_dev
da2d9dad
MK
112field describes the device on which this file resides.
113
114The
115.I st_rdev
116field describes the device that this file (inode) represents.
117
118The
fea681da 119.I st_size
c13182ef
MK
120field gives the size of the file (if it is a regular
121file or a symbolic link) in bytes.
da2d9dad 122The size of a symlink is the length of the pathname
28d88c17 123it contains, without a trailing null byte.
fea681da 124
da2d9dad 125The
fea681da 126.I st_blocks
32f30015 127field indicates the number of blocks allocated to the file, 512-byte units.
fea681da 128(This may be smaller than
eee0a2ec
MK
129.IR st_size /512
130when the file has holes.)
da2d9dad
MK
131
132The
fea681da 133.IR st_blksize
da2d9dad 134field gives the "preferred" blocksize for efficient file system I/O.
fea681da
MK
135(Writing to a file in smaller chunks may cause
136an inefficient read-modify-rewrite.)
137.PP
138Not all of the Linux filesystems implement all of the time fields.
139Some file system types allow mounting in such a way that file
140accesses do not cause an update of the
141.I st_atime
c13182ef
MK
142field.
143(See `noatime' in
fea681da
MK
144.BR mount (8).)
145
146The field
147.I st_atime
75b94dc3 148is changed by file accesses, for example, by
fea681da
MK
149.BR execve (2),
150.BR mknod (2),
151.BR pipe (2),
152.BR utime (2)
153and
154.BR read (2)
7c93fec0
MK
155(of more than zero bytes).
156Other routines, like
fea681da
MK
157.BR mmap (2),
158may or may not update
159.IR st_atime .
160
161The field
162.I st_mtime
75b94dc3 163is changed by file modifications, for example, by
fea681da
MK
164.BR mknod (2),
165.BR truncate (2),
166.BR utime (2)
167and
168.BR write (2)
169(of more than zero bytes).
170Moreover,
171.I st_mtime
172of a directory is changed by the creation or deletion of files
173in that directory.
174The
175.I st_mtime
176field is
177.I not
178changed for changes in owner, group, hard link count, or mode.
179
180The field
181.I st_ctime
182is changed by writing or by setting inode information
183(i.e., owner, group, link count, mode, etc.).
184.PP
168df940
MK
185The following POSIX macros are defined to check the file type using the
186.I st_mode
187field:
fea681da
MK
188.RS
189.TP 1.2i
c91e381d 190.BR S_ISREG (m)
fea681da
MK
191is it a regular file?
192.TP
c91e381d 193.BR S_ISDIR (m)
fea681da
MK
194directory?
195.TP
c91e381d 196.BR S_ISCHR (m)
fea681da
MK
197character device?
198.TP
c91e381d 199.BR S_ISBLK (m)
fea681da
MK
200block device?
201.TP
c91e381d 202.BR S_ISFIFO (m)
da2d9dad 203FIFO (named pipe)?
fea681da 204.TP
c91e381d 205.BR S_ISLNK (m)
fea681da
MK
206symbolic link? (Not in POSIX.1-1996.)
207.TP
c91e381d 208.BR S_ISSOCK (m)
fea681da
MK
209socket? (Not in POSIX.1-1996.)
210.RE
211.PP
212The following flags are defined for the
213.I st_mode
214field:
c91e381d 215.RS
fea681da 216.TS
c91e381d 217lB l l.
fea681da
MK
218S_IFMT 0170000 bitmask for the file type bitfields
219S_IFSOCK 0140000 socket
220S_IFLNK 0120000 symbolic link
221S_IFREG 0100000 regular file
222S_IFBLK 0060000 block device
223S_IFDIR 0040000 directory
224S_IFCHR 0020000 character device
da2d9dad 225S_IFIFO 0010000 FIFO
fea681da 226S_ISUID 0004000 set UID bit
da2d9dad 227S_ISGID 0002000 set-group-ID bit (see below)
fea681da
MK
228S_ISVTX 0001000 sticky bit (see below)
229S_IRWXU 00700 mask for file owner permissions
230S_IRUSR 00400 owner has read permission
231S_IWUSR 00200 owner has write permission
232S_IXUSR 00100 owner has execute permission
233S_IRWXG 00070 mask for group permissions
234S_IRGRP 00040 group has read permission
235S_IWGRP 00020 group has write permission
236S_IXGRP 00010 group has execute permission
237S_IRWXO 00007 mask for permissions for others (not in group)
238S_IROTH 00004 others have read permission
704a18f0 239S_IWOTH 00002 others have write permission
fea681da
MK
240S_IXOTH 00001 others have execute permission
241.TE
c91e381d 242.RE
fea681da 243.P
2f0af33b
MK
244The set-group-ID bit
245.RB ( S_ISGID )
246has several special uses.
fea681da
MK
247For a directory it indicates that BSD semantics is to be used
248for that directory: files created there inherit their group ID from
249the directory, not from the effective group ID of the creating process,
2f0af33b
MK
250and directories created there will also get the
251.B S_ISGID
252bit set.
66ee0c7e 253For a file that does not have the group execution bit
2f0af33b
MK
254.RB ( S_IXGRP )
255set,
da2d9dad 256the set-group-ID bit indicates mandatory file/record locking.
fea681da 257.P
2f0af33b
MK
258The `sticky' bit
259.RB ( S_ISVTX )
260on a directory means that a file
fea681da
MK
261in that directory can be renamed or deleted only by the owner
262of the file, by the owner of the directory, and by a privileged
263process.
264.SH "RETURN VALUE"
c13182ef
MK
265On success, zero is returned.
266On error, \-1 is returned, and
fea681da
MK
267.I errno
268is set appropriately.
269.SH ERRORS
270.TP
271.B EACCES
272Search permission is denied for one of the directories
273in the path prefix of
da2d9dad 274.IR path .
fea681da 275(See also
ad7cc990 276.BR path_resolution (7).)
fea681da
MK
277.TP
278.B EBADF
279.I filedes
280is bad.
281.TP
282.B EFAULT
283Bad address.
284.TP
285.B ELOOP
286Too many symbolic links encountered while traversing the path.
287.TP
288.B ENAMETOOLONG
289File name too long.
290.TP
291.B ENOENT
292A component of the path
da2d9dad 293.I path
fea681da
MK
294does not exist, or the path is an empty string.
295.TP
296.B ENOMEM
75b94dc3 297Out of memory (i.e., kernel memory).
fea681da
MK
298.TP
299.B ENOTDIR
300A component of the path is not a directory.
301.SH "CONFORMING TO"
a7fadb55 302These system calls conform to SVr4, 4.3BSD, POSIX.1-2001.
97c1eac8
MK
303.\" SVr4 documents additional
304.\" .BR fstat ()
305.\" error conditions EINTR, ENOLINK, and EOVERFLOW. SVr4
306.\" documents additional
307.\" .BR stat ()
308.\" and
309.\" .BR lstat ()
310.\" error conditions EINTR, EMULTIHOP, ENOLINK, and EOVERFLOW.
311
fea681da
MK
312Use of the
313.I st_blocks
314and
315.I st_blksize
c13182ef
MK
316fields may be less portable.
317(They were introduced in BSD.
318The interpretation differs between systems,
319and possibly on a single system when NFS mounts are involved.)
fea681da 320.LP
c91e381d 321POSIX does not describe the
66ee0c7e
MK
322.BR S_IFMT ,
323.BR S_IFSOCK ,
324.BR S_IFLNK ,
325.BR S_IFREG ,
c91e381d 326.BR S_IFBLK ,
66ee0c7e
MK
327.BR S_IFDIR ,
328.BR S_IFCHR ,
329.BR S_IFIFO ,
c91e381d
MK
330.BR S_ISVTX
331bits, but instead demands the use of
332the macros
333.BR S_ISDIR (),
334etc.
1274071a 335The
c91e381d 336.BR S_ISLNK ()
1274071a 337and
c91e381d 338.BR S_ISSOCK ()
1274071a 339macros are not in
97c1eac8
MK
340POSIX.1-1996, but both are present in POSIX.1-2001;
341the former is from SVID 4, the latter from SUSv2.
fea681da 342.LP
66ee0c7e
MK
343Unix V7 (and later systems) had
344.BR S_IREAD ,
345.BR S_IWRITE ,
c91e381d
MK
346.BR S_IEXEC ,
347where POSIX
66ee0c7e
MK
348prescribes the synonyms
349.BR S_IRUSR ,
350.BR S_IWUSR ,
c91e381d 351.BR S_IXUSR .
042bae96 352.SS "Other Systems"
fea681da 353Values that have been (or are) in use on various systems:
fea681da
MK
354.TS
355l l l l l.
356hex name ls octal description
357f000 S_IFMT 170000 mask for file type
3580000 000000 SCO out-of-service inode, BSD unknown type
c91e381d
MK
359 SVID-v2 and XPG2 have both 0 and 0100000
360 for ordinary file
da2d9dad 3611000 S_IFIFO p| 010000 FIFO (named pipe)
fea681da
MK
3622000 S_IFCHR c 020000 character special (V7)
3633000 S_IFMPC 030000 multiplexed character special (V7)
3644000 S_IFDIR d/ 040000 directory (V7)
3655000 S_IFNAM 050000 XENIX named special file
c91e381d 366 with two subtypes, distinguished by \fIst_rdev\fP values 1, 2
fea681da
MK
3670001 S_INSEM s 000001 XENIX semaphore subtype of IFNAM
3680002 S_INSHD m 000002 XENIX shared data subtype of IFNAM
3696000 S_IFBLK b 060000 block special (V7)
3707000 S_IFMPB 070000 multiplexed block special (V7)
3718000 S_IFREG - 100000 regular (V7)
3729000 S_IFCMP 110000 VxFS compressed
3739000 S_IFNWK n 110000 network special (HP-UX)
374a000 S_IFLNK l@ 120000 symbolic link (BSD)
375b000 S_IFSHAD 130000 Solaris shadow inode for ACL (not seen by userspace)
376c000 S_IFSOCK s= 140000 socket (BSD; also "S_IFSOC" on VxFS)
377d000 S_IFDOOR D> 150000 Solaris door
378e000 S_IFWHT w% 160000 BSD whiteout (not used for inode)
fea681da
MK
3790200 S_ISVTX 001000 `sticky bit': save swapped text even after use (V7)
380 reserved (SVID-v2)
381 On non-directories: don't cache this file (SunOS)
382 On directories: restricted deletion flag (SVID-v4.2)
c7400a2c 3830400 S_ISGID 002000 set-group-ID on execution (V7)
c91e381d
MK
384 for directories: use BSD semantics for
385 propagation of GID
da2d9dad
MK
3860400 S_ENFMT 002000 SysV file locking enforcement (shared with S_ISGID)
3870800 S_ISUID 004000 set-user-ID on execution (V7)
fea681da
MK
3880800 S_CDF 004000 directory is a context dependent file (HP-UX)
389.TE
390
391A sticky command appeared in Version 32V AT&T UNIX.
2b2581ee
MK
392.SH NOTES
393.SS Linux Notes
394Since kernel 2.5.48, the
395.I stat
396structure supports nanosecond resolution for the three
397file timestamp fields.
398Glibc exposes the nanosecond component of each field using names either
399of the form
400.IR st_atim.tv_nsec ,
db4e96b7
MK
401if the
402.B _BSD_SOURCE
403or
404.B _SVID_SOURCE
405feature test macro is defined,
2b2581ee
MK
406or of the form
407.IR st_atimensec ,
408if neither of these macros is defined.
409On file systems that do not support sub-second timestamps,
410these nanosecond fields are returned with the value 0.
411
412For most files under the
413.I /proc
414directory,
415.BR stat ()
416does not return the file size in the
417.I st_size
418field; instead the field is returned with the value 0.
b8f9d9dd
MK
419.SS Underlying kernel interface
420Over time, increases in the size of the
421.I stat
422structure have led to three successive implementations of
423.BR stat ():
424.IR sys_stat ()
425(slot
426.IR __NR_oldstat ),
427.IR sys_newstat ()
428(slot
429.IR __NR_stat ),
430and
431.IR sys_stat64()
432(new in kernel 2.4; slot
d28a0b77
MK
433.IR __NR_stat64 ).
434The last of these is the most current,
435but the other interfaces must be maintained so that the
436behavior of old binaries does not change.
437The glibc
b8f9d9dd 438.BR stat ()
d28a0b77
MK
439wrapper function hides these details from applications,
440ensuring that new binaries use the current implementation,
441and that binary compatability is not broken
442for older binaries.
b8f9d9dd
MK
443Similar remarks apply for
444.BR fstat (2)
445and
446.BR lstat (2).
bc7ff20e 447.SH EXAMPLE
988db661 448The following program calls
bc7ff20e
MK
449.BR stat (2)
450and displays selected fields in the returned
451.I stat
452structure.
453.nf
454
455#include <sys/types.h>
456#include <sys/stat.h>
457#include <time.h>
458#include <stdio.h>
988db661 459#include <stdlib.h>
bc7ff20e
MK
460
461int
462main(int argc, char *argv[])
463{
464 struct stat sb;
465
466 if (argc != 2) {
467 fprintf(stderr, "Usage: %s <pathname>\\n", argv[0]);
468 exit(EXIT_FAILURE);
469 }
470
29059a65 471 if (stat(argv[1], &sb) == \-1) {
bc7ff20e
MK
472 perror("stat");
473 exit(EXIT_SUCCESS);
474 }
475
476 printf("File type: ");
477 switch (sb.st_mode & S_IFMT) {
478 case S_IFBLK: printf("block device\\n"); break;
479 case S_IFCHR: printf("character device\\n"); break;
480 case S_IFDIR: printf("directory\\n"); break;
481 case S_IFIFO: printf("FIFO/pipe\\n"); break;
482 case S_IFLNK: printf("symlink\\n"); break;
483 case S_IFREG: printf("regular file\\n"); break;
484 case S_IFSOCK: printf("socket\\n"); break;
485 default: printf("unknown?\\n"); break;
486 }
487
29059a65 488 printf("I\-node number: %ld\\n", (long) sb.st_ino);
bc7ff20e 489
988db661 490 printf("Mode: %lo (octal)\\n",
bc7ff20e
MK
491 (unsigned long) sb.st_mode);
492
493 printf("Link count: %ld\\n", (long) sb.st_nlink);
494 printf("Ownership: UID=%ld GID=%ld\\n",
495 (long) sb.st_uid, (long) sb.st_gid);
496
988db661 497 printf("Preferred I/O block size: %ld bytes\\n",
bc7ff20e 498 (long) sb.st_blksize);
988db661 499 printf("File size: %lld bytes\\n",
bc7ff20e 500 (long long) sb.st_size);
988db661 501 printf("Blocks allocated: %lld\\n",
bc7ff20e
MK
502 (long long) sb.st_blocks);
503
460e6363 504 printf("Last inode change: %s", ctime(&sb.st_ctime));
bc7ff20e
MK
505 printf("Last file access: %s", ctime(&sb.st_atime));
506 printf("Last file modification: %s", ctime(&sb.st_mtime));
507
508 exit(EXIT_SUCCESS);
509}
510.fi
fea681da 511.SH "SEE ALSO"
7a5b4ffb 512.BR access (2),
fea681da
MK
513.BR chmod (2),
514.BR chown (2),
956a6446 515.BR fstatat (2),
fea681da
MK
516.BR readlink (2),
517.BR utime (2),
518.BR capabilities (7)