]>
Commit | Line | Data |
---|---|---|
69a93556 | 1 | /* O_*, F_*, FD_* bit values for Linux. |
82be5f39 | 2 | Copyright (C) 1995-1998, 2000, 2004, 2006, 2007, 2009, 2010, 2011 |
713ddf8d | 3 | Free Software Foundation, Inc. |
69a93556 UD |
4 | This file is part of the GNU C Library. |
5 | ||
6 | The GNU C Library is free software; you can redistribute it and/or | |
3214b89b AJ |
7 | modify it under the terms of the GNU Lesser General Public |
8 | License as published by the Free Software Foundation; either | |
9 | version 2.1 of the License, or (at your option) any later version. | |
69a93556 UD |
10 | |
11 | The GNU C Library is distributed in the hope that it will be useful, | |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
3214b89b AJ |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | Lesser General Public License for more details. | |
69a93556 | 15 | |
3214b89b | 16 | You should have received a copy of the GNU Lesser General Public |
ab84e3ff PE |
17 | License along with the GNU C Library. If not, see |
18 | <http://www.gnu.org/licenses/>. */ | |
69a93556 UD |
19 | |
20 | #ifndef _FCNTL_H | |
21 | # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead." | |
22 | #endif | |
23 | ||
69a93556 | 24 | #include <sys/types.h> |
142b51e4 DJ |
25 | #ifdef __USE_GNU |
26 | # include <bits/uio.h> | |
27 | #endif | |
69a93556 | 28 | |
b395a209 | 29 | |
69a93556 UD |
30 | /* open/fcntl - O_SYNC is only implemented on blocks devices and on files |
31 | located on an ext2 file system */ | |
b395a209 DJ |
32 | #define O_ACCMODE 0003 |
33 | #define O_RDONLY 00 | |
34 | #define O_WRONLY 01 | |
35 | #define O_RDWR 02 | |
36 | #define O_CREAT 0100 /* not fcntl */ | |
37 | #define O_EXCL 0200 /* not fcntl */ | |
38 | #define O_NOCTTY 0400 /* not fcntl */ | |
39 | #define O_TRUNC 01000 /* not fcntl */ | |
40 | #define O_APPEND 02000 | |
41 | #define O_NONBLOCK 04000 | |
69a93556 | 42 | #define O_NDELAY O_NONBLOCK |
4d0f4f9f | 43 | #define O_SYNC 04010000 |
b395a209 DJ |
44 | #define O_FSYNC O_SYNC |
45 | #define O_ASYNC 020000 | |
69a93556 | 46 | |
0549913f | 47 | #ifdef __USE_XOPEN2K8 |
b395a209 | 48 | # define O_DIRECTORY 040000 /* Must be a directory. */ |
5e9880e0 | 49 | # define O_NOFOLLOW 0100000 /* Do not follow links. */ |
0549913f JM |
50 | # define O_CLOEXEC 02000000 /* Set close_on_exec. */ |
51 | #endif | |
52 | #ifdef __USE_GNU | |
5e9880e0 | 53 | # define O_DIRECT 0200000 /* Direct disk access. */ |
b395a209 | 54 | # define O_NOATIME 01000000 /* Do not set atime. */ |
adb252da | 55 | # define O_PATH 010000000 /* Resolve pathname but do not open file. */ |
69a93556 UD |
56 | #endif |
57 | ||
58 | /* For now Linux has synchronisity options for data and read operations. | |
59 | We define the symbols here but let them do the same as O_SYNC since | |
5e9880e0 | 60 | this is a superset. */ |
69a93556 | 61 | #if defined __USE_POSIX199309 || defined __USE_UNIX98 |
4d0f4f9f | 62 | # define O_DSYNC 010000 /* Synchronize data. */ |
5e9880e0 | 63 | # define O_RSYNC O_SYNC /* Synchronize read operations. */ |
69a93556 UD |
64 | #endif |
65 | ||
b395a209 DJ |
66 | #ifdef __USE_LARGEFILE64 |
67 | # define O_LARGEFILE 0400000 | |
68 | #endif | |
69 | ||
69a93556 UD |
70 | /* Values for the second argument to `fcntl'. */ |
71 | #define F_DUPFD 0 /* Duplicate file descriptor. */ | |
72 | #define F_GETFD 1 /* Get file descriptor flags. */ | |
73 | #define F_SETFD 2 /* Set file descriptor flags. */ | |
74 | #define F_GETFL 3 /* Get file status flags. */ | |
75 | #define F_SETFL 4 /* Set file status flags. */ | |
2747c0ea AJ |
76 | #ifndef __USE_FILE_OFFSET64 |
77 | # define F_GETLK 5 /* Get record locking info. */ | |
78 | # define F_SETLK 6 /* Set record locking info (non-blocking). */ | |
5e9880e0 | 79 | # define F_SETLKW 7 /* Set record locking info (blocking). */ |
2747c0ea | 80 | #else |
5e9880e0 | 81 | # define F_GETLK F_GETLK64 /* Get record locking info. */ |
2747c0ea AJ |
82 | # define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ |
83 | # define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ | |
84 | #endif | |
85 | #define F_GETLK64 12 /* Get record locking info. */ | |
86 | #define F_SETLK64 13 /* Set record locking info (non-blocking). */ | |
5e9880e0 | 87 | #define F_SETLKW64 14 /* Set record locking info (blocking). */ |
69a93556 | 88 | |
0549913f | 89 | #if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8 |
4ba089f8 JM |
90 | # define F_SETOWN 8 /* Get owner (process receiving SIGIO). */ |
91 | # define F_GETOWN 9 /* Set owner (process receiving SIGIO). */ | |
69a93556 UD |
92 | #endif |
93 | ||
94 | #ifdef __USE_GNU | |
95 | # define F_SETSIG 10 /* Set number of signal to be sent. */ | |
96 | # define F_GETSIG 11 /* Get number of signal to be sent. */ | |
06bda6de JM |
97 | # define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */ |
98 | # define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */ | |
69a93556 UD |
99 | #endif |
100 | ||
d867f219 | 101 | #ifdef __USE_GNU |
5e9880e0 AJ |
102 | # define F_SETLEASE 1024 /* Set a lease. */ |
103 | # define F_GETLEASE 1025 /* Enquire what lease is active. */ | |
104 | # define F_NOTIFY 1026 /* Request notfications on a directory. */ | |
ce47c036 JM |
105 | # define F_SETPIPE_SZ 1031 /* Set pipe page size array. */ |
106 | # define F_GETPIPE_SZ 1032 /* Set pipe page size array. */ | |
0549913f JM |
107 | #endif |
108 | #ifdef __USE_XOPEN2K8 | |
7e0bd9eb DJ |
109 | # define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with |
110 | close-on-exit set. */ | |
d867f219 AJ |
111 | #endif |
112 | ||
8323b1ab | 113 | /* For F_[GET|SET]FD. */ |
69a93556 UD |
114 | #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ |
115 | ||
116 | /* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ | |
117 | #define F_RDLCK 0 /* Read lock. */ | |
5e9880e0 AJ |
118 | #define F_WRLCK 1 /* Write lock. */ |
119 | #define F_UNLCK 2 /* Remove lock. */ | |
69a93556 | 120 | |
b395a209 | 121 | /* For old implementation of bsd flock(). */ |
69a93556 UD |
122 | #define F_EXLCK 4 /* or 3 */ |
123 | #define F_SHLCK 8 /* or 4 */ | |
124 | ||
125 | #ifdef __USE_BSD | |
b395a209 | 126 | /* Operations for bsd flock(), also used by the kernel implementation. */ |
69a93556 UD |
127 | # define LOCK_SH 1 /* shared lock */ |
128 | # define LOCK_EX 2 /* exclusive lock */ | |
129 | # define LOCK_NB 4 /* or'd with one of the above to prevent | |
130 | blocking */ | |
131 | # define LOCK_UN 8 /* remove lock */ | |
132 | #endif | |
133 | ||
d867f219 AJ |
134 | #ifdef __USE_GNU |
135 | # define LOCK_MAND 32 /* This is a mandatory flock: */ | |
5e9880e0 | 136 | # define LOCK_READ 64 /* ... which allows concurrent read operations. */ |
d867f219 | 137 | # define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ |
5e9880e0 | 138 | # define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ |
d867f219 AJ |
139 | #endif |
140 | ||
5e9880e0 | 141 | #ifdef __USE_GNU |
d867f219 | 142 | /* Types of directory notifications that may be requested with F_NOTIFY. */ |
5e9880e0 AJ |
143 | # define DN_ACCESS 0x00000001 /* File accessed. */ |
144 | # define DN_MODIFY 0x00000002 /* File modified. */ | |
145 | # define DN_CREATE 0x00000004 /* File created. */ | |
146 | # define DN_DELETE 0x00000008 /* File removed. */ | |
147 | # define DN_RENAME 0x00000010 /* File renamed. */ | |
148 | # define DN_ATTRIB 0x00000020 /* File changed attibutes. */ | |
149 | # define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ | |
150 | #endif | |
d867f219 | 151 | |
69a93556 UD |
152 | struct flock |
153 | { | |
5e9880e0 | 154 | short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ |
69a93556 UD |
155 | short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ |
156 | #ifndef __USE_FILE_OFFSET64 | |
157 | __off_t l_start; /* Offset where the lock begins. */ | |
158 | __off_t l_len; /* Size of the locked area; zero means until EOF. */ | |
159 | #else | |
160 | __off64_t l_start; /* Offset where the lock begins. */ | |
161 | __off64_t l_len; /* Size of the locked area; zero means until EOF. */ | |
162 | #endif | |
163 | __pid_t l_pid; /* Process holding the lock. */ | |
164 | }; | |
165 | ||
166 | #ifdef __USE_LARGEFILE64 | |
167 | struct flock64 | |
168 | { | |
5e9880e0 | 169 | short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ |
69a93556 UD |
170 | short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ |
171 | __off64_t l_start; /* Offset where the lock begins. */ | |
172 | __off64_t l_len; /* Size of the locked area; zero means until EOF. */ | |
173 | __pid_t l_pid; /* Process holding the lock. */ | |
174 | }; | |
175 | #endif | |
176 | ||
0366e559 JM |
177 | #ifdef __USE_GNU |
178 | /* Owner types. */ | |
179 | enum __pid_type | |
180 | { | |
bc97817f JM |
181 | F_OWNER_TID = 0, /* Kernel thread. */ |
182 | F_OWNER_PID, /* Process. */ | |
183 | F_OWNER_PGRP, /* Process group. */ | |
184 | F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */ | |
0366e559 JM |
185 | }; |
186 | ||
187 | /* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */ | |
188 | struct f_owner_ex | |
189 | { | |
190 | enum __pid_type type; /* Owner type of ID. */ | |
191 | __pid_t pid; /* ID of owner. */ | |
192 | }; | |
193 | #endif | |
194 | ||
69a93556 UD |
195 | /* Define some more compatibility macros to be backward compatible with |
196 | BSD systems which did not managed to hide these kernel macros. */ | |
197 | #ifdef __USE_BSD | |
198 | # define FAPPEND O_APPEND | |
199 | # define FFSYNC O_FSYNC | |
200 | # define FASYNC O_ASYNC | |
201 | # define FNONBLOCK O_NONBLOCK | |
202 | # define FNDELAY O_NDELAY | |
203 | #endif /* Use BSD. */ | |
204 | ||
205 | /* Advise to `posix_fadvise'. */ | |
206 | #ifdef __USE_XOPEN2K | |
207 | # define POSIX_FADV_NORMAL 0 /* No further special treatment. */ | |
208 | # define POSIX_FADV_RANDOM 1 /* Expect random page references. */ | |
5e9880e0 | 209 | # define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ |
69a93556 UD |
210 | # define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ |
211 | # define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ | |
212 | # define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ | |
213 | #endif | |
9efb40c8 | 214 | |
142b51e4 | 215 | |
711daa30 | 216 | #ifdef __USE_GNU |
b395a209 DJ |
217 | /* Flags for SYNC_FILE_RANGE. */ |
218 | # define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages | |
219 | in the range before performing the | |
220 | write. */ | |
221 | # define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those | |
222 | dirty pages in the range which are | |
223 | not presently under writeback. */ | |
224 | # define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in | |
225 | the range after performing the | |
226 | write. */ | |
227 | ||
228 | /* Flags for SPLICE and VMSPLICE. */ | |
229 | # define SPLICE_F_MOVE 1 /* Move pages instead of copying. */ | |
230 | # define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing | |
231 | (but we may still block on the fd | |
232 | we splice from/to). */ | |
233 | # define SPLICE_F_MORE 4 /* Expect more data. */ | |
234 | # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ | |
82be5f39 JM |
235 | |
236 | ||
237 | /* File handle structure. */ | |
238 | struct file_handle | |
239 | { | |
240 | unsigned int handle_bytes; | |
241 | int handle_type; | |
242 | /* File identifier. */ | |
243 | unsigned char f_handle[0]; | |
244 | }; | |
245 | ||
246 | /* Maximum handle size (for now). */ | |
247 | # define MAX_HANDLE_SZ 128 | |
711daa30 DJ |
248 | #endif |
249 | ||
9efb40c8 UD |
250 | __BEGIN_DECLS |
251 | ||
142b51e4 DJ |
252 | #ifdef __USE_GNU |
253 | ||
9efb40c8 UD |
254 | /* Provide kernel hint to read ahead. */ |
255 | extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) | |
256 | __THROW; | |
257 | ||
142b51e4 DJ |
258 | |
259 | /* Selective file content synch'ing. */ | |
0ecde272 | 260 | extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, |
b395a209 | 261 | unsigned int __flags); |
142b51e4 DJ |
262 | |
263 | ||
82be5f39 JM |
264 | /* Splice address range into a pipe. |
265 | ||
266 | This function is a possible cancellation point and therefore not | |
267 | marked with __THROW. */ | |
017cc633 DJ |
268 | extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, |
269 | size_t __count, unsigned int __flags); | |
142b51e4 | 270 | |
82be5f39 JM |
271 | /* Splice two files together. |
272 | ||
273 | This function is a possible cancellation point and therefore not | |
274 | marked with __THROW. */ | |
017cc633 DJ |
275 | extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, |
276 | __off64_t *__offout, size_t __len, | |
277 | unsigned int __flags); | |
142b51e4 | 278 | |
82be5f39 JM |
279 | /* In-kernel implementation of tee for pipe buffers. |
280 | ||
281 | This function is a possible cancellation point and therefore not | |
282 | marked with __THROW. */ | |
017cc633 DJ |
283 | extern ssize_t tee (int __fdin, int __fdout, size_t __len, |
284 | unsigned int __flags); | |
142b51e4 | 285 | |
82be5f39 JM |
286 | /* Reserve storage for the data of the file associated with FD. |
287 | ||
288 | This function is a possible cancellation point and therefore not | |
289 | marked with __THROW. */ | |
ae99295b JM |
290 | # ifndef __USE_FILE_OFFSET64 |
291 | extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); | |
292 | # else | |
293 | # ifdef __REDIRECT | |
b055d3f1 JM |
294 | extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset, |
295 | __off64_t __len), | |
ae99295b JM |
296 | fallocate64); |
297 | # else | |
298 | # define fallocate fallocate64 | |
299 | # endif | |
300 | # endif | |
301 | # ifdef __USE_LARGEFILE64 | |
302 | extern int fallocate64 (int __fd, int __mode, __off64_t __offset, | |
303 | __off64_t __len); | |
304 | # endif | |
305 | ||
82be5f39 JM |
306 | |
307 | /* Map file name to file handle. */ | |
308 | extern int name_to_handle_at (int __dfd, const char *__name, | |
309 | struct file_handle *__handle, int *__mnt_id, | |
310 | int __flags) __THROW; | |
311 | ||
312 | /* Open file using the file handle. | |
313 | ||
314 | This function is a possible cancellation point and therefore not | |
315 | marked with __THROW. */ | |
54feca39 JM |
316 | extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, |
317 | int __flags); | |
82be5f39 | 318 | |
142b51e4 DJ |
319 | #endif |
320 | ||
9efb40c8 | 321 | __END_DECLS |