1 | /*- |
---|
2 | * Copyright (c) 1983, 1990, 1993 |
---|
3 | * The Regents of the University of California. All rights reserved. |
---|
4 | * (c) UNIX System Laboratories, Inc. |
---|
5 | * All or some portions of this file are derived from material licensed |
---|
6 | * to the University of California by American Telephone and Telegraph |
---|
7 | * Co. or Unix System Laboratories, Inc. and are reproduced herein with |
---|
8 | * the permission of UNIX System Laboratories, Inc. |
---|
9 | * |
---|
10 | * Redistribution and use in source and binary forms, with or without |
---|
11 | * modification, are permitted provided that the following conditions |
---|
12 | * are met: |
---|
13 | * 1. Redistributions of source code must retain the above copyright |
---|
14 | * notice, this list of conditions and the following disclaimer. |
---|
15 | * 2. Redistributions in binary form must reproduce the above copyright |
---|
16 | * notice, this list of conditions and the following disclaimer in the |
---|
17 | * documentation and/or other materials provided with the distribution. |
---|
18 | * 4. Neither the name of the University nor the names of its contributors |
---|
19 | * may be used to endorse or promote products derived from this software |
---|
20 | * without specific prior written permission. |
---|
21 | * |
---|
22 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
---|
23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
---|
26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
---|
27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
---|
28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
---|
29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
---|
30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
---|
31 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
---|
32 | * SUCH DAMAGE. |
---|
33 | * |
---|
34 | * @(#)fcntl.h 8.3 (Berkeley) 1/21/94 |
---|
35 | * $FreeBSD$ |
---|
36 | */ |
---|
37 | |
---|
38 | #ifndef _SYS_FCNTL_H_ |
---|
39 | #define _SYS_FCNTL_H_ |
---|
40 | |
---|
41 | /* |
---|
42 | * This file includes the definitions for open and fcntl |
---|
43 | * described by POSIX for <fcntl.h>; it also includes |
---|
44 | * related kernel definitions. |
---|
45 | */ |
---|
46 | |
---|
47 | #include <sys/cdefs.h> |
---|
48 | #include <rtems/bsd/sys/_types.h> |
---|
49 | |
---|
50 | #ifndef _MODE_T_DECLARED |
---|
51 | typedef __mode_t mode_t; |
---|
52 | #define _MODE_T_DECLARED |
---|
53 | #endif |
---|
54 | |
---|
55 | #ifndef _OFF_T_DECLARED |
---|
56 | typedef __off_t off_t; |
---|
57 | #define _OFF_T_DECLARED |
---|
58 | #endif |
---|
59 | |
---|
60 | #ifndef _PID_T_DECLARED |
---|
61 | typedef __pid_t pid_t; |
---|
62 | #define _PID_T_DECLARED |
---|
63 | #endif |
---|
64 | |
---|
65 | /* |
---|
66 | * File status flags: these are used by open(2), fcntl(2). |
---|
67 | * They are also used (indirectly) in the kernel file structure f_flags, |
---|
68 | * which is a superset of the open/fcntl flags. Open flags and f_flags |
---|
69 | * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags). |
---|
70 | * Open/fcntl flags begin with O_; kernel-internal flags begin with F. |
---|
71 | */ |
---|
72 | /* open-only flags */ |
---|
73 | #define O_RDONLY 0x0000 /* open for reading only */ |
---|
74 | #define O_WRONLY 0x0001 /* open for writing only */ |
---|
75 | #define O_RDWR 0x0002 /* open for reading and writing */ |
---|
76 | #define O_ACCMODE 0x0003 /* mask for above modes */ |
---|
77 | |
---|
78 | /* |
---|
79 | * Kernel encoding of open mode; separate read and write bits that are |
---|
80 | * independently testable: 1 greater than the above. |
---|
81 | * |
---|
82 | * XXX |
---|
83 | * FREAD and FWRITE are excluded from the #ifdef _KERNEL so that TIOCFLUSH, |
---|
84 | * which was documented to use FREAD/FWRITE, continues to work. |
---|
85 | */ |
---|
86 | #if __BSD_VISIBLE |
---|
87 | #define FREAD 0x0001 |
---|
88 | #define FWRITE 0x0002 |
---|
89 | #endif |
---|
90 | #define O_NONBLOCK 0x0004 /* no delay */ |
---|
91 | #define O_APPEND 0x0008 /* set append mode */ |
---|
92 | #if __BSD_VISIBLE |
---|
93 | #define O_SHLOCK 0x0010 /* open with shared file lock */ |
---|
94 | #define O_EXLOCK 0x0020 /* open with exclusive file lock */ |
---|
95 | #define O_ASYNC 0x0040 /* signal pgrp when data ready */ |
---|
96 | #define O_FSYNC 0x0080 /* synchronous writes */ |
---|
97 | #endif |
---|
98 | #define O_SYNC 0x0080 /* POSIX synonym for O_FSYNC */ |
---|
99 | #if __BSD_VISIBLE |
---|
100 | #define O_NOFOLLOW 0x0100 /* don't follow symlinks */ |
---|
101 | #endif |
---|
102 | #define O_CREAT 0x0200 /* create if nonexistent */ |
---|
103 | #define O_TRUNC 0x0400 /* truncate to zero length */ |
---|
104 | #define O_EXCL 0x0800 /* error if already exists */ |
---|
105 | #ifdef _KERNEL |
---|
106 | #define FHASLOCK 0x4000 /* descriptor holds advisory lock */ |
---|
107 | #endif |
---|
108 | |
---|
109 | /* Defined by POSIX 1003.1; BSD default, but must be distinct from O_RDONLY. */ |
---|
110 | #define O_NOCTTY 0x8000 /* don't assign controlling terminal */ |
---|
111 | |
---|
112 | #if __BSD_VISIBLE |
---|
113 | /* Attempt to bypass buffer cache */ |
---|
114 | #define O_DIRECT 0x00010000 |
---|
115 | #endif |
---|
116 | |
---|
117 | /* Defined by POSIX Extended API Set Part 2 */ |
---|
118 | #if __BSD_VISIBLE |
---|
119 | #define O_DIRECTORY 0x00020000 /* Fail if not directory */ |
---|
120 | #define O_EXEC 0x00040000 /* Open for execute only */ |
---|
121 | #endif |
---|
122 | #ifdef _KERNEL |
---|
123 | #define FEXEC O_EXEC |
---|
124 | #endif |
---|
125 | |
---|
126 | /* Defined by POSIX 1003.1-2008; BSD default, but reserve for future use. */ |
---|
127 | #if __POSIX_VISIBLE >= 200809 |
---|
128 | #define O_TTY_INIT 0x00080000 /* Restore default termios attributes */ |
---|
129 | #endif |
---|
130 | |
---|
131 | /* |
---|
132 | * XXX missing O_DSYNC, O_RSYNC. |
---|
133 | */ |
---|
134 | |
---|
135 | #ifdef _KERNEL |
---|
136 | /* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */ |
---|
137 | #define FFLAGS(oflags) ((oflags) + 1) |
---|
138 | #define OFLAGS(fflags) ((fflags) - 1) |
---|
139 | |
---|
140 | /* bits to save after open */ |
---|
141 | #define FMASK (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK|O_DIRECT|FEXEC) |
---|
142 | /* bits settable by fcntl(F_SETFL, ...) */ |
---|
143 | #define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FRDAHEAD|O_DIRECT) |
---|
144 | |
---|
145 | #if defined(COMPAT_FREEBSD7) || defined(COMPAT_FREEBSD6) || \ |
---|
146 | defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) |
---|
147 | /* |
---|
148 | * Set by shm_open(3) in older libc's to get automatic MAP_ASYNC |
---|
149 | * behavior for POSIX shared memory objects (which are otherwise |
---|
150 | * implemented as plain files). |
---|
151 | */ |
---|
152 | #define FPOSIXSHM O_NOFOLLOW |
---|
153 | #undef FCNTLFLAGS |
---|
154 | #define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FPOSIXSHM|FRDAHEAD| \ |
---|
155 | O_DIRECT) |
---|
156 | #endif |
---|
157 | #endif |
---|
158 | |
---|
159 | /* |
---|
160 | * The O_* flags used to have only F* names, which were used in the kernel |
---|
161 | * and by fcntl. We retain the F* names for the kernel f_flag field |
---|
162 | * and for backward compatibility for fcntl. These flags are deprecated. |
---|
163 | */ |
---|
164 | #if __BSD_VISIBLE |
---|
165 | #define FAPPEND O_APPEND /* kernel/compat */ |
---|
166 | #define FASYNC O_ASYNC /* kernel/compat */ |
---|
167 | #define FFSYNC O_FSYNC /* kernel */ |
---|
168 | #define FNONBLOCK O_NONBLOCK /* kernel */ |
---|
169 | #define FNDELAY O_NONBLOCK /* compat */ |
---|
170 | #define O_NDELAY O_NONBLOCK /* compat */ |
---|
171 | #endif |
---|
172 | |
---|
173 | /* |
---|
174 | * We are out of bits in f_flag (which is a short). However, |
---|
175 | * the flag bits not set in FMASK are only meaningful in the |
---|
176 | * initial open syscall. Those bits can thus be given a |
---|
177 | * different meaning for fcntl(2). |
---|
178 | */ |
---|
179 | #if __BSD_VISIBLE |
---|
180 | /* Read ahead */ |
---|
181 | #define FRDAHEAD O_CREAT |
---|
182 | #endif |
---|
183 | |
---|
184 | /* Defined by POSIX Extended API Set Part 2 */ |
---|
185 | #if __BSD_VISIBLE |
---|
186 | /* |
---|
187 | * Magic value that specify the use of the current working directory |
---|
188 | * to determine the target of relative file paths in the openat() and |
---|
189 | * similar syscalls. |
---|
190 | */ |
---|
191 | #define AT_FDCWD -100 |
---|
192 | |
---|
193 | /* |
---|
194 | * Miscellaneous flags for the *at() syscalls. |
---|
195 | */ |
---|
196 | #define AT_EACCESS 0x100 /* Check access using effective user and group ID */ |
---|
197 | #define AT_SYMLINK_NOFOLLOW 0x200 /* Do not follow symbolic links */ |
---|
198 | #define AT_SYMLINK_FOLLOW 0x400 /* Follow symbolic link */ |
---|
199 | #define AT_REMOVEDIR 0x800 /* Remove directory instead of file */ |
---|
200 | #endif |
---|
201 | |
---|
202 | /* |
---|
203 | * Constants used for fcntl(2) |
---|
204 | */ |
---|
205 | |
---|
206 | /* command values */ |
---|
207 | #define F_DUPFD 0 /* duplicate file descriptor */ |
---|
208 | #define F_GETFD 1 /* get file descriptor flags */ |
---|
209 | #define F_SETFD 2 /* set file descriptor flags */ |
---|
210 | #define F_GETFL 3 /* get file status flags */ |
---|
211 | #define F_SETFL 4 /* set file status flags */ |
---|
212 | #if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 |
---|
213 | #define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */ |
---|
214 | #define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */ |
---|
215 | #endif |
---|
216 | #define F_OGETLK 7 /* get record locking information */ |
---|
217 | #define F_OSETLK 8 /* set record locking information */ |
---|
218 | #define F_OSETLKW 9 /* F_SETLK; wait if blocked */ |
---|
219 | #define F_DUP2FD 10 /* duplicate file descriptor to arg */ |
---|
220 | #define F_GETLK 11 /* get record locking information */ |
---|
221 | #define F_SETLK 12 /* set record locking information */ |
---|
222 | #define F_SETLKW 13 /* F_SETLK; wait if blocked */ |
---|
223 | #define F_SETLK_REMOTE 14 /* debugging support for remote locks */ |
---|
224 | #define F_READAHEAD 15 /* read ahead */ |
---|
225 | #define F_RDAHEAD 16 /* Darwin compatible read ahead */ |
---|
226 | |
---|
227 | /* file descriptor flags (F_GETFD, F_SETFD) */ |
---|
228 | #define FD_CLOEXEC 1 /* close-on-exec flag */ |
---|
229 | |
---|
230 | /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */ |
---|
231 | #define F_RDLCK 1 /* shared or read lock */ |
---|
232 | #define F_UNLCK 2 /* unlock */ |
---|
233 | #define F_WRLCK 3 /* exclusive or write lock */ |
---|
234 | #define F_UNLCKSYS 4 /* purge locks for a given system ID */ |
---|
235 | #define F_CANCEL 5 /* cancel an async lock request */ |
---|
236 | #ifdef _KERNEL |
---|
237 | #define F_WAIT 0x010 /* Wait until lock is granted */ |
---|
238 | #define F_FLOCK 0x020 /* Use flock(2) semantics for lock */ |
---|
239 | #define F_POSIX 0x040 /* Use POSIX semantics for lock */ |
---|
240 | #define F_REMOTE 0x080 /* Lock owner is remote NFS client */ |
---|
241 | #define F_NOINTR 0x100 /* Ignore signals when waiting */ |
---|
242 | #endif |
---|
243 | |
---|
244 | /* |
---|
245 | * Advisory file segment locking data type - |
---|
246 | * information passed to system by user |
---|
247 | */ |
---|
248 | struct flock { |
---|
249 | off_t l_start; /* starting offset */ |
---|
250 | off_t l_len; /* len = 0 means until end of file */ |
---|
251 | pid_t l_pid; /* lock owner */ |
---|
252 | short l_type; /* lock type: read/write, etc. */ |
---|
253 | short l_whence; /* type of l_start */ |
---|
254 | int l_sysid; /* remote system id or zero for local */ |
---|
255 | }; |
---|
256 | |
---|
257 | /* |
---|
258 | * Old advisory file segment locking data type, |
---|
259 | * before adding l_sysid. |
---|
260 | */ |
---|
261 | struct oflock { |
---|
262 | off_t l_start; /* starting offset */ |
---|
263 | off_t l_len; /* len = 0 means until end of file */ |
---|
264 | pid_t l_pid; /* lock owner */ |
---|
265 | short l_type; /* lock type: read/write, etc. */ |
---|
266 | short l_whence; /* type of l_start */ |
---|
267 | }; |
---|
268 | |
---|
269 | |
---|
270 | #if __BSD_VISIBLE |
---|
271 | /* lock operations for flock(2) */ |
---|
272 | #define LOCK_SH 0x01 /* shared file lock */ |
---|
273 | #define LOCK_EX 0x02 /* exclusive file lock */ |
---|
274 | #define LOCK_NB 0x04 /* don't block when locking */ |
---|
275 | #define LOCK_UN 0x08 /* unlock file */ |
---|
276 | #endif |
---|
277 | |
---|
278 | /* |
---|
279 | * XXX missing posix_fadvise() and posix_fallocate(), and POSIX_FADV_* macros. |
---|
280 | */ |
---|
281 | |
---|
282 | #ifndef _KERNEL |
---|
283 | __BEGIN_DECLS |
---|
284 | int open(const char *, int, ...); |
---|
285 | int creat(const char *, mode_t); |
---|
286 | int fcntl(int, int, ...); |
---|
287 | #if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 |
---|
288 | int openat(int, const char *, int, ...); |
---|
289 | #endif |
---|
290 | #if __BSD_VISIBLE |
---|
291 | int flock(int, int); |
---|
292 | #endif |
---|
293 | __END_DECLS |
---|
294 | #endif |
---|
295 | |
---|
296 | #endif /* !_SYS_FCNTL_H_ */ |
---|