|
|
1.1 root 1: .TH STAT 2 "27 July 1983"
2: .UC 4
3: .SH NAME
4: stat, lstat, fstat \- get file status
5: .SH SYNOPSIS
6: .nf
7: .ft B
8: #include <sys/types.h>
9: #include <sys/stat.h>
10: .PP
11: .ft B
12: stat(path, buf)
13: char *path;
14: struct stat *buf;
15: .PP
16: .ft B
17: lstat(path, buf)
18: char *path;
19: struct stat *buf;
20: .PP
21: .ft B
22: fstat(fd, buf)
23: int fd;
24: struct stat *buf;
25: .fi
26: .ft R
27: .SH DESCRIPTION
28: .I Stat
29: obtains information about the file
30: .IR path .
31: Read, write or execute
32: permission of the named file is not required, but all directories
33: listed in the path name leading to the file must be reachable.
34: .PP
35: .I Lstat
36: is like \fIstat\fP except in the case where the named file is a symbolic link,
37: in which case
38: .I lstat
39: returns information about the link,
40: while
41: .I stat
42: returns information about the file the link references.
43: .PP
44: .I Fstat
45: obtains the same information about an open file
46: referenced by the argument descriptor, such as would
47: be obtained by an \fIopen\fP call.
48: .PP
49: .I Buf
50: is a pointer to a
51: .I stat
52: structure into which information is placed concerning the file.
53: The contents of the structure pointed to by
54: .I buf
55: .PP
56: .nf
57: .ta 1i 1.7i 2.5i
58: struct stat {
59: dev_t st_dev; /* device inode resides on */
60: ino_t st_ino; /* this inode's number */
61: u_short st_mode; /* protection */
62: short st_nlink; /* number or hard links to the file */
63: short st_uid; /* user-id of owner */
64: short st_gid; /* group-id of owner */
65: dev_t st_rdev; /* the device type, for inode that is device */
66: off_t st_size; /* total size of file */
67: time_t st_atime; /* file last access time */
68: int st_spare1;
69: time_t st_mtime; /* file last modify time */
70: int st_spare2;
71: time_t st_ctime; /* file last status change time */
72: int st_spare3;
73: long st_blksize; /* optimal blocksize for file system i/o ops */
74: long st_blocks; /* actual number of blocks allocated */
75: long st_spare4[2];
76: };
77: .fi
78: .DT
79: .PP
80: .TP 12
81: st_atime
82: Time when file data was last read or modified. Changed by the following system
83: calls:
84: .IR mknod (2),
85: .IR utimes (2),
86: .IR read (2),
87: and
88: .IR write (2).
89: For reasons of efficiency,
90: st_atime is not set when a directory
91: is searched, although this would be more logical.
92: .TP 12
93: st_mtime
94: Time when data was last modified.
95: It is not set by changes of owner, group, link count, or mode.
96: Changed by the following system calls:
97: .IR mknod (2),
98: .IR utimes (2),
99: .IR write (2).
100: .TP 12
101: st_ctime
102: Time when file status was last changed.
103: It is set both both by writing and changing the i-node.
104: Changed by the following system calls:
105: .IR chmod (2)
106: .IR chown (2),
107: .IR link (2),
108: .IR mknod (2),
109: .IR unlink (2),
110: .IR utimes (2),
111: .IR write (2).
112: .PP
113: The status information word \fIst_mode\fP has bits:
114: .nf
115: .in +5n
116: .ta 1.6i 2.5i 3i
117: #define S_IFMT 0170000 /* type of file */
118: #define\ \ \ \ S_IFDIR 0040000 /* directory */
119: #define\ \ \ \ S_IFCHR 0020000 /* character special */
120: #define\ \ \ \ S_IFBLK 0060000 /* block special */
121: #define\ \ \ \ S_IFREG 0100000 /* regular */
122: #define\ \ \ \ S_IFLNK 0120000 /* symbolic link */
123: #define\ \ \ \ S_IFSOCK 0140000 /* socket */
124: #define S_ISUID 0004000 /* set user id on execution */
125: #define S_ISGID 0002000 /* set group id on execution */
126: #define S_ISVTX 0001000 /* save swapped text even after use */
127: #define S_IREAD 0000400 /* read permission, owner */
128: #define S_IWRITE 0000200 /* write permission, owner */
129: #define S_IEXEC 0000100 /* execute/search permission, owner */
130: .fi
131: .in -5n
132: .PP
133: The mode bits 0000070 and 0000007 encode group and
134: others permissions (see
135: .IR chmod (2)).
136: .PP
137: When
138: .I fd
139: is associated with a pipe,
140: .I fstat
141: reports an ordinary file with an i-node number,
142: restricted permissions,
143: and a not necessarily meaningful length.
144: .SH "RETURN VALUE
145: Upon successful completion a value of 0 is returned.
146: Otherwise, a value of \-1 is returned and
147: .I errno
148: is set to indicate the error.
149: .SH "ERRORS
150: .I Stat
151: and
152: .I lstat
153: will fail if one or more of the following are true:
154: .TP 15
155: [ENOTDIR]
156: A component of the path prefix is not a directory.
157: .TP 15
158: [EPERM]
159: The pathname contains a character with the high-order bit set.
160: .TP 15
161: [ENOENT]
162: The pathname was too long.
163: .TP 15
164: [ENOENT]
165: The named file does not exist.
166: .TP 15
167: [EACCES]
168: Search permission is denied for a component of the path prefix.
169: .TP 15
170: [EFAULT]
171: .I Buf
172: or
173: .I name
174: points to an invalid address.
175: .PP
176: .I Fstat
177: will fail if one or both of the following are true:
178: .TP 15
179: [EBADF]
180: .I Fildes
181: is not a valid open file descriptor.
182: .TP 15
183: [EFAULT]
184: .I Buf
185: points to an invalid address.
186: .TP 15
187: [ELOOP]
188: Too many symbolic links were encountered in translating the pathname.
189: .SH CAVEAT
190: The fields in the stat structure currently marked
191: .IR st_spare1 ,
192: .IR st_spare2 ,
193: and
194: .I st_spare3
195: are present in preparation for inode time stamps expanding
196: to 64 bits. This, however, can break certain programs which
197: depend on the time stamps being contiguous (in calls to
198: .IR utimes (2)).
199: .SH "SEE ALSO"
200: chmod(2), chown(2), utimes(2)
201: .SH BUGS
202: Applying
203: .I fstat
204: to a socket returns a zero'd buffer.
205: .PP
206: The list of calls which modify the various fields should be carefully
207: checked with reality.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.