]>
Commit | Line | Data |
---|---|---|
f21acc89 | 1 | /* O_*, F_*, FD_* bit values for Linux. |
26b54a6b AO |
2 | Copyright (C) 1995, 1996, 1997, 1998, 2000, 2002, 2003 |
3 | Free Software Foundation, Inc. | |
f21acc89 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 | |
41bdb6e2 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. | |
f21acc89 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 | |
41bdb6e2 AJ |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | Lesser General Public License for more details. | |
f21acc89 | 15 | |
41bdb6e2 AJ |
16 | You should have received a copy of the GNU Lesser General Public |
17 | License along with the GNU C Library; if not, write to the Free | |
18 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | |
19 | 02111-1307 USA. */ | |
f21acc89 UD |
20 | |
21 | #ifndef _FCNTL_H | |
dfd2257a | 22 | # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead." |
f21acc89 UD |
23 | #endif |
24 | ||
25 | #include <sys/types.h> | |
26 | ||
27 | ||
f21acc89 UD |
28 | /* open/fcntl - O_SYNC is only implemented on blocks devices and on files |
29 | located on an ext2 file system */ | |
30 | #define O_ACCMODE 0x0003 | |
31 | #define O_RDONLY 0x0000 | |
32 | #define O_WRONLY 0x0001 | |
33 | #define O_RDWR 0x0002 | |
34 | #define O_APPEND 0x0008 | |
35 | #define O_SYNC 0x0010 | |
36 | #define O_NONBLOCK 0x0080 | |
1df99b5f | 37 | #define O_CREAT 0x0100 /* not fcntl */ |
f21acc89 UD |
38 | #define O_TRUNC 0x0200 /* not fcntl */ |
39 | #define O_EXCL 0x0400 /* not fcntl */ | |
40 | #define O_NOCTTY 0x0800 /* not fcntl */ | |
41 | #define O_FSYNC O_SYNC | |
9ffbb612 UD |
42 | #define O_ASYNC 0x1000 |
43 | ||
c79772f5 | 44 | #ifdef __USE_LARGEFILE64 |
fc40fc6c | 45 | # define O_LARGEFILE 0x2000 /* Allow large file opens. */ |
c79772f5 UD |
46 | #endif |
47 | ||
48 | #ifdef __USE_GNU | |
73ea3b1b | 49 | # define O_NOFOLLOW 0x20000 /* Do not follow links. */ |
fc40fc6c | 50 | # define O_DIRECT 0x8000 /* Direct disk access hint. */ |
1df99b5f | 51 | # define O_DIRECTORY 0x10000 /* Must be a directory. */ |
9ffbb612 | 52 | #endif |
f21acc89 UD |
53 | |
54 | #define O_NDELAY O_NONBLOCK | |
55 | ||
c79772f5 | 56 | /* For now Linux has no synchronisity options for data and read |
1df99b5f | 57 | operations. We define the symbols here but let them do the same as |
c79772f5 UD |
58 | O_SYNC since this is a superset. */ |
59 | #if defined __USE_POSIX199309 || defined __USE_UNIX98 | |
60 | # define O_DSYNC O_SYNC /* Synchronize data. */ | |
1df99b5f | 61 | # define O_RSYNC O_SYNC /* Synchronize read operations. */ |
c79772f5 UD |
62 | #endif |
63 | ||
dfd2257a UD |
64 | /* Values for the second argument to `fcntl'. */ |
65 | #define F_DUPFD 0 /* Duplicate file descriptor. */ | |
66 | #define F_GETFD 1 /* Get file descriptor flags. */ | |
67 | #define F_SETFD 2 /* Set file descriptor flags. */ | |
68 | #define F_GETFL 3 /* Get file status flags. */ | |
69 | #define F_SETFL 4 /* Set file status flags. */ | |
f622c1a7 AJ |
70 | #ifndef __USE_FILE_OFFSET64 |
71 | # define F_GETLK 14 /* Get record locking info. */ | |
72 | # define F_SETLK 6 /* Set record locking info (non-blocking). */ | |
1df99b5f | 73 | # define F_SETLKW 7 /* Set record locking info (blocking). */ |
f622c1a7 | 74 | #else |
1df99b5f | 75 | # define F_GETLK F_GETLK64 /* Get record locking info. */ |
f622c1a7 AJ |
76 | # define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ |
77 | # define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ | |
78 | #endif | |
dfd2257a | 79 | |
f622c1a7 AJ |
80 | #define F_GETLK64 33 /* Get record locking info. */ |
81 | #define F_SETLK64 34 /* Set record locking info (non-blocking). */ | |
1df99b5f | 82 | #define F_SETLKW64 35 /* Set record locking info (blocking). */ |
dfd2257a | 83 | |
01ed6c51 | 84 | #if defined __USE_BSD || defined __USE_XOPEN2K |
df777c40 UD |
85 | # define F_SETOWN 24 /* Get owner of socket (receiver of SIGIO). */ |
86 | # define F_GETOWN 23 /* Set owner of socket (receiver of SIGIO). */ | |
87 | #endif | |
88 | ||
89 | #ifdef __USE_GNU | |
90 | # define F_SETSIG 10 /* Set number of signal to be sent. */ | |
91 | # define F_GETSIG 11 /* Get number of signal to be sent. */ | |
dfd2257a | 92 | #endif |
f21acc89 | 93 | |
a67b0400 | 94 | #ifdef __USE_GNU |
1df99b5f AJ |
95 | # define F_SETLEASE 1024 /* Set a lease. */ |
96 | # define F_GETLEASE 1025 /* Enquire what lease is active. */ | |
97 | # define F_NOTIFY 1026 /* Request notfications on a directory. */ | |
a67b0400 AJ |
98 | #endif |
99 | ||
f21acc89 UD |
100 | /* for F_[GET|SET]FL */ |
101 | #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ | |
102 | ||
dfd2257a UD |
103 | /* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ |
104 | #define F_RDLCK 0 /* Read lock. */ | |
1df99b5f AJ |
105 | #define F_WRLCK 1 /* Write lock. */ |
106 | #define F_UNLCK 2 /* Remove lock. */ | |
f21acc89 UD |
107 | |
108 | /* for old implementation of bsd flock () */ | |
109 | #define F_EXLCK 4 /* or 3 */ | |
110 | #define F_SHLCK 8 /* or 4 */ | |
111 | ||
4a582094 UD |
112 | #ifdef __USE_BSD |
113 | /* Operations for bsd flock(), also used by the kernel implementation */ | |
114 | # define LOCK_SH 1 /* shared lock */ | |
115 | # define LOCK_EX 2 /* exclusive lock */ | |
085320f5 | 116 | # define LOCK_NB 4 /* or'd with one of the above to prevent |
f21acc89 | 117 | blocking */ |
4a582094 UD |
118 | # define LOCK_UN 8 /* remove lock */ |
119 | #endif | |
f21acc89 | 120 | |
a67b0400 AJ |
121 | #ifdef __USE_GNU |
122 | # define LOCK_MAND 32 /* This is a mandatory flock: */ | |
1df99b5f | 123 | # define LOCK_READ 64 /* ... which allows concurrent read operations. */ |
a67b0400 | 124 | # define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ |
1df99b5f | 125 | # define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ |
a67b0400 AJ |
126 | #endif |
127 | ||
1df99b5f | 128 | #ifdef __USE_GNU |
a67b0400 | 129 | /* Types of directory notifications that may be requested with F_NOTIFY. */ |
1df99b5f AJ |
130 | # define DN_ACCESS 0x00000001 /* File accessed. */ |
131 | # define DN_MODIFY 0x00000002 /* File modified. */ | |
132 | # define DN_CREATE 0x00000004 /* File created. */ | |
133 | # define DN_DELETE 0x00000008 /* File removed. */ | |
134 | # define DN_RENAME 0x00000010 /* File renamed. */ | |
135 | # define DN_ATTRIB 0x00000020 /* File changed attibutes. */ | |
136 | # define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ | |
137 | #endif | |
a67b0400 | 138 | |
dfd2257a UD |
139 | typedef struct flock |
140 | { | |
1df99b5f | 141 | short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ |
dfd2257a UD |
142 | short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ |
143 | #ifndef __USE_FILE_OFFSET64 | |
144 | __off_t l_start; /* Offset where the lock begins. */ | |
145 | __off_t l_len; /* Size of the locked area; zero means until EOF. */ | |
26b54a6b AO |
146 | #if ! (defined _ABI64 && _MIPS_SIM == _ABI64) |
147 | /* The 64-bit flock structure, used by the n64 ABI, and for 64-bit | |
148 | fcntls in o32 and n32, never has this field. */ | |
149 | long int l_sysid; | |
150 | #endif | |
dfd2257a UD |
151 | #else |
152 | __off64_t l_start; /* Offset where the lock begins. */ | |
153 | __off64_t l_len; /* Size of the locked area; zero means until EOF. */ | |
154 | #endif | |
dfd2257a | 155 | __pid_t l_pid; /* Process holding the lock. */ |
26b54a6b AO |
156 | #if ! defined __USE_FILE_OFFSET64 && ! (defined _ABI64 && _MIPS_SIM == _ABI64) |
157 | /* The 64-bit flock structure, used by the n64 ABI, and for 64-bit | |
158 | flock in o32 and n32, never has this field. */ | |
159 | long int pad[4]; | |
f622c1a7 AJ |
160 | #endif |
161 | } flock_t; | |
dfd2257a UD |
162 | |
163 | #ifdef __USE_LARGEFILE64 | |
164 | struct flock64 | |
165 | { | |
1df99b5f | 166 | short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ |
dfd2257a UD |
167 | short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ |
168 | __off64_t l_start; /* Offset where the lock begins. */ | |
169 | __off64_t l_len; /* Size of the locked area; zero means until EOF. */ | |
dfd2257a | 170 | __pid_t l_pid; /* Process holding the lock. */ |
dfd2257a UD |
171 | }; |
172 | #endif | |
f21acc89 UD |
173 | |
174 | ||
175 | /* Define some more compatibility macros to be backward compatible with | |
176 | BSD systems which did not managed to hide these kernel macros. */ | |
177 | #ifdef __USE_BSD | |
dfd2257a UD |
178 | # define FAPPEND O_APPEND |
179 | # define FFSYNC O_FSYNC | |
180 | # define FASYNC O_ASYNC | |
181 | # define FNONBLOCK O_NONBLOCK | |
182 | # define FNDELAY O_NDELAY | |
f21acc89 | 183 | #endif /* Use BSD. */ |
bb8e0116 UD |
184 | |
185 | /* Advise to `posix_fadvise'. */ | |
186 | #ifdef __USE_XOPEN2K | |
187 | # define POSIX_FADV_NORMAL 0 /* No further special treatment. */ | |
188 | # define POSIX_FADV_RANDOM 1 /* Expect random page references. */ | |
1df99b5f | 189 | # define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ |
bb8e0116 UD |
190 | # define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ |
191 | # define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ | |
192 | # define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ | |
193 | #endif |