root / lab4 / .minix-src / include / sys / stat.h @ 13
History | View | Annotate | Download (10.9 KB)
1 |
/* $NetBSD: stat.h,v 1.68 2013/10/17 18:01:11 njoly Exp $ */
|
---|---|
2 |
|
3 |
/*-
|
4 |
* Copyright (c) 1982, 1986, 1989, 1993
|
5 |
* The Regents of the University of California. All rights reserved.
|
6 |
* (c) UNIX System Laboratories, Inc.
|
7 |
* All or some portions of this file are derived from material licensed
|
8 |
* to the University of California by American Telephone and Telegraph
|
9 |
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
10 |
* the permission of UNIX System Laboratories, Inc.
|
11 |
*
|
12 |
* Redistribution and use in source and binary forms, with or without
|
13 |
* modification, are permitted provided that the following conditions
|
14 |
* are met:
|
15 |
* 1. Redistributions of source code must retain the above copyright
|
16 |
* notice, this list of conditions and the following disclaimer.
|
17 |
* 2. Redistributions in binary form must reproduce the above copyright
|
18 |
* notice, this list of conditions and the following disclaimer in the
|
19 |
* documentation and/or other materials provided with the distribution.
|
20 |
* 3. Neither the name of the University nor the names of its contributors
|
21 |
* may be used to endorse or promote products derived from this software
|
22 |
* without specific prior written permission.
|
23 |
*
|
24 |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
25 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
26 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
27 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
28 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
29 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
30 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
31 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
32 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
33 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
34 |
* SUCH DAMAGE.
|
35 |
*
|
36 |
* @(#)stat.h 8.12 (Berkeley) 8/17/94
|
37 |
*/
|
38 |
|
39 |
#ifndef _SYS_STAT_H_
|
40 |
#define _SYS_STAT_H_
|
41 |
|
42 |
#include <sys/featuretest.h> |
43 |
#include <sys/types.h> /* XXX */ |
44 |
|
45 |
#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \ |
46 |
defined(_NETBSD_SOURCE) |
47 |
/*
|
48 |
* POSIX:2008 / XPG7 requires struct timespec to be declared in
|
49 |
* this header, but does not provide the usual exemption
|
50 |
* "inclusion of this header may make visible symbols defined in <time.h>".
|
51 |
*
|
52 |
* This is a Standard omission, acknowledged by the committee and
|
53 |
* scheduled to be corrected in Technical Corrigendum 2, according to
|
54 |
* http://austingroupbugs.net/view.php?id=531
|
55 |
*/
|
56 |
#include <sys/time.h> |
57 |
#endif
|
58 |
|
59 |
struct stat {
|
60 |
dev_t st_dev; /* inode's device */
|
61 |
mode_t st_mode; /* inode protection mode */
|
62 |
ino_t st_ino; /* inode's number */
|
63 |
nlink_t st_nlink; /* number of hard links */
|
64 |
uid_t st_uid; /* user ID of the file's owner */
|
65 |
gid_t st_gid; /* group ID of the file's group */
|
66 |
dev_t st_rdev; /* device type */
|
67 |
#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \ |
68 |
defined(_NETBSD_SOURCE) |
69 |
struct timespec st_atim; /* time of last access */ |
70 |
struct timespec st_mtim; /* time of last data modification */ |
71 |
struct timespec st_ctim; /* time of last file status change */ |
72 |
struct timespec st_birthtim; /* time of creation */ |
73 |
#else
|
74 |
time_t st_atime; /* time of last access */
|
75 |
long st_atimensec; /* nsec of last access */ |
76 |
time_t st_mtime; /* time of last data modification */
|
77 |
long st_mtimensec; /* nsec of last data modification */ |
78 |
time_t st_ctime; /* time of last file status change */
|
79 |
long st_ctimensec; /* nsec of last file status change */ |
80 |
time_t st_birthtime; /* time of creation */
|
81 |
long st_birthtimensec; /* nsec of time of creation */ |
82 |
#endif
|
83 |
off_t st_size; /* file size, in bytes */
|
84 |
blkcnt_t st_blocks; /* blocks allocated for file */
|
85 |
blksize_t st_blksize; /* optimal blocksize for I/O */
|
86 |
uint32_t st_flags; /* user defined flags for file */
|
87 |
uint32_t st_gen; /* file generation number */
|
88 |
uint32_t st_spare[2];
|
89 |
}; |
90 |
|
91 |
#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \ |
92 |
defined(_NETBSD_SOURCE) |
93 |
/* Standard-mandated compatibility */
|
94 |
#define st_atime st_atim.tv_sec
|
95 |
#define st_mtime st_mtim.tv_sec
|
96 |
#define st_ctime st_ctim.tv_sec
|
97 |
#define st_birthtime st_birthtim.tv_sec
|
98 |
#endif
|
99 |
|
100 |
#if defined(_NETBSD_SOURCE)
|
101 |
#define st_atimespec st_atim
|
102 |
#define st_atimensec st_atim.tv_nsec
|
103 |
#define st_mtimespec st_mtim
|
104 |
#define st_mtimensec st_mtim.tv_nsec
|
105 |
#define st_ctimespec st_ctim
|
106 |
#define st_ctimensec st_ctim.tv_nsec
|
107 |
#define st_birthtimespec st_birthtim
|
108 |
#define st_birthtimensec st_birthtimespec.tv_nsec
|
109 |
#endif
|
110 |
|
111 |
#define S_ISUID 0004000 /* set user id on execution */ |
112 |
#define S_ISGID 0002000 /* set group id on execution */ |
113 |
#if defined(_NETBSD_SOURCE)
|
114 |
#define S_ISTXT 0001000 /* sticky bit */ |
115 |
#endif
|
116 |
|
117 |
#define S_IRWXU 0000700 /* RWX mask for owner */ |
118 |
#define S_IRUSR 0000400 /* R for owner */ |
119 |
#define S_IWUSR 0000200 /* W for owner */ |
120 |
#define S_IXUSR 0000100 /* X for owner */ |
121 |
|
122 |
#if defined(_NETBSD_SOURCE)
|
123 |
#define S_IREAD S_IRUSR
|
124 |
#define S_IWRITE S_IWUSR
|
125 |
#define S_IEXEC S_IXUSR
|
126 |
#endif
|
127 |
|
128 |
#define S_IRWXG 0000070 /* RWX mask for group */ |
129 |
#define S_IRGRP 0000040 /* R for group */ |
130 |
#define S_IWGRP 0000020 /* W for group */ |
131 |
#define S_IXGRP 0000010 /* X for group */ |
132 |
|
133 |
#define S_IRWXO 0000007 /* RWX mask for other */ |
134 |
#define S_IROTH 0000004 /* R for other */ |
135 |
#define S_IWOTH 0000002 /* W for other */ |
136 |
#define S_IXOTH 0000001 /* X for other */ |
137 |
|
138 |
#define _S_IFMT 0170000 /* type of file mask */ |
139 |
#define _S_IFIFO 0010000 /* named pipe (fifo) */ |
140 |
#define _S_IFCHR 0020000 /* character special */ |
141 |
#define _S_IFDIR 0040000 /* directory */ |
142 |
#define _S_IFBLK 0060000 /* block special */ |
143 |
#define _S_IFREG 0100000 /* regular */ |
144 |
#define _S_IFLNK 0120000 /* symbolic link */ |
145 |
#define _S_ISVTX 0001000 /* save swapped text even after use */ |
146 |
#define _S_IFSOCK 0140000 /* socket */ |
147 |
#define _S_IFWHT 0160000 /* whiteout */ |
148 |
#define _S_ARCH1 0200000 /* Archive state 1, ls -l shows 'a' */ |
149 |
#define _S_ARCH2 0400000 /* Archive state 2, ls -l shows 'A' */ |
150 |
|
151 |
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
152 |
#define S_IFMT _S_IFMT
|
153 |
#define S_IFIFO _S_IFIFO
|
154 |
#define S_IFCHR _S_IFCHR
|
155 |
#define S_IFDIR _S_IFDIR
|
156 |
#define S_IFBLK _S_IFBLK
|
157 |
#define S_IFREG _S_IFREG
|
158 |
#define S_IFLNK _S_IFLNK
|
159 |
#define S_ISVTX _S_ISVTX
|
160 |
#endif
|
161 |
#if ((_XOPEN_SOURCE - 0) >= 600) || defined(_NETBSD_SOURCE) |
162 |
#define S_IFSOCK _S_IFSOCK
|
163 |
#endif
|
164 |
#if defined(_NETBSD_SOURCE)
|
165 |
#define S_IFWHT _S_IFWHT
|
166 |
|
167 |
#define S_ARCH1 _S_ARCH1
|
168 |
#define S_ARCH2 _S_ARCH2
|
169 |
#endif
|
170 |
|
171 |
#define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) /* directory */ |
172 |
#define S_ISCHR(m) (((m) & _S_IFMT) == _S_IFCHR) /* char special */ |
173 |
#define S_ISBLK(m) (((m) & _S_IFMT) == _S_IFBLK) /* block special */ |
174 |
#define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG) /* regular file */ |
175 |
#define S_ISFIFO(m) (((m) & _S_IFMT) == _S_IFIFO) /* fifo */ |
176 |
#if ((_POSIX_C_SOURCE - 0) >= 200112L) || defined(_XOPEN_SOURCE) || \ |
177 |
defined(_NETBSD_SOURCE) |
178 |
#define S_ISLNK(m) (((m) & _S_IFMT) == _S_IFLNK) /* symbolic link */ |
179 |
#endif
|
180 |
#if ((_POSIX_C_SOURCE - 0) >= 200112L) || ((_XOPEN_SOURCE - 0) >= 600) || \ |
181 |
defined(_NETBSD_SOURCE) |
182 |
#define S_ISSOCK(m) (((m) & _S_IFMT) == _S_IFSOCK) /* socket */ |
183 |
#endif
|
184 |
#if defined(_NETBSD_SOURCE)
|
185 |
#define S_ISWHT(m) (((m) & _S_IFMT) == _S_IFWHT) /* whiteout */ |
186 |
#endif
|
187 |
|
188 |
#if defined(_NETBSD_SOURCE)
|
189 |
#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */ |
190 |
/* 7777 */
|
191 |
#define ALLPERMS (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO)
|
192 |
/* 0666 */
|
193 |
#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
|
194 |
|
195 |
#define S_BLKSIZE 512 /* block size used in the stat struct */ |
196 |
|
197 |
/*
|
198 |
* Definitions of flags stored in file flags word.
|
199 |
*
|
200 |
* Super-user and owner changeable flags.
|
201 |
*/
|
202 |
#define UF_SETTABLE 0x0000ffff /* mask of owner changeable flags */ |
203 |
#define UF_NODUMP 0x00000001 /* do not dump file */ |
204 |
#define UF_IMMUTABLE 0x00000002 /* file may not be changed */ |
205 |
#define UF_APPEND 0x00000004 /* writes to file may only append */ |
206 |
#define UF_OPAQUE 0x00000008 /* directory is opaque wrt. union */ |
207 |
/* UF_NOUNLINK 0x00000010 [NOT IMPLEMENTED] */
|
208 |
/*
|
209 |
* Super-user changeable flags.
|
210 |
*/
|
211 |
#define SF_SETTABLE 0xffff0000 /* mask of superuser changeable flags */ |
212 |
#define SF_ARCHIVED 0x00010000 /* file is archived */ |
213 |
#define SF_IMMUTABLE 0x00020000 /* file may not be changed */ |
214 |
#define SF_APPEND 0x00040000 /* writes to file may only append */ |
215 |
/* SF_NOUNLINK 0x00100000 [NOT IMPLEMENTED] */
|
216 |
#define SF_SNAPSHOT 0x00200000 /* snapshot inode */ |
217 |
#define SF_LOG 0x00400000 /* WAPBL log file inode */ |
218 |
#define SF_SNAPINVAL 0x00800000 /* snapshot is invalid */ |
219 |
|
220 |
#ifdef _KERNEL
|
221 |
/*
|
222 |
* Shorthand abbreviations of above.
|
223 |
*/
|
224 |
#define OPAQUE (UF_OPAQUE)
|
225 |
#define APPEND (UF_APPEND | SF_APPEND)
|
226 |
#define IMMUTABLE (UF_IMMUTABLE | SF_IMMUTABLE)
|
227 |
#endif /* _KERNEL */ |
228 |
#endif /* _NETBSD_SOURCE */ |
229 |
|
230 |
#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \ |
231 |
defined(_NETBSD_SOURCE) |
232 |
/*
|
233 |
* Special values for utimensat and futimens
|
234 |
*/
|
235 |
#define UTIME_NOW ((1 << 30) - 1) |
236 |
#define UTIME_OMIT ((1 << 30) - 2) |
237 |
#endif
|
238 |
|
239 |
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
240 |
#include <sys/cdefs.h> |
241 |
|
242 |
__BEGIN_DECLS |
243 |
int chmod(const char *, mode_t); |
244 |
int mkdir(const char *, mode_t); |
245 |
int mkfifo(const char *, mode_t); |
246 |
#ifndef __LIBC12_SOURCE__
|
247 |
int stat(const char *, struct stat *) __RENAME(__stat50); |
248 |
int fstat(int, struct stat *) __RENAME(__fstat50); |
249 |
#endif
|
250 |
mode_t umask(mode_t); |
251 |
#if (_POSIX_C_SOURCE - 0) >= 200112L || defined(_XOPEN_SOURCE) || \ |
252 |
defined(_NETBSD_SOURCE) |
253 |
#ifndef __LIBC12_SOURCE__
|
254 |
int lstat(const char *, struct stat *) __RENAME(__lstat50); |
255 |
#endif
|
256 |
#endif /* _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE || _NETBSD_SOURCE */ |
257 |
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
258 |
int fchmod(int, mode_t); |
259 |
#ifndef __LIBC12_SOURCE__
|
260 |
int mknod(const char *, mode_t, dev_t) __RENAME(__mknod50); |
261 |
#endif
|
262 |
#endif /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */ |
263 |
|
264 |
#if defined(_NETBSD_SOURCE)
|
265 |
int chflags(const char *, unsigned long); |
266 |
int fchflags(int, unsigned long); |
267 |
int lchflags(const char *, unsigned long); |
268 |
int lchmod(const char *, mode_t); |
269 |
#endif /* defined(_NETBSD_SOURCE) */ |
270 |
|
271 |
#ifndef __LIBC12_SOURCE__
|
272 |
/*
|
273 |
* X/Open Extended API set 2 (a.k.a. C063)
|
274 |
*/
|
275 |
#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \ |
276 |
defined(_NETBSD_SOURCE) || defined(_INCOMPLETE_XOPEN_C063) |
277 |
int fchmodat(int, const char *, mode_t, int); |
278 |
int fstatat(int, const char *, struct stat *, int); |
279 |
int mkdirat(int, const char *, mode_t); |
280 |
int mkfifoat(int, const char *, mode_t); |
281 |
int mknodat(int, const char *, mode_t, dev_t); |
282 |
int utimensat(int, const char *, const struct timespec *, int); |
283 |
#endif
|
284 |
|
285 |
#ifdef _NETBSD_SOURCE
|
286 |
int utimens(const char *, const struct timespec *); |
287 |
int lutimens(const char *, const struct timespec *); |
288 |
#endif
|
289 |
|
290 |
#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \ |
291 |
defined(_NETBSD_SOURCE) |
292 |
int futimens(int, const struct timespec *); |
293 |
#endif
|
294 |
#endif
|
295 |
|
296 |
__END_DECLS |
297 |
|
298 |
#endif /* !_KERNEL && !_STANDALONE */ |
299 |
#endif /* !_SYS_STAT_H_ */ |