Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/uapi/asm-generic/fcntl.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2
#ifndef _ASM_GENERIC_FCNTL_H
3
#define _ASM_GENERIC_FCNTL_H
4
5
#include <linux/types.h>
6
7
/*
8
* FMODE_EXEC is 0x20
9
* These cannot be used by userspace O_* until internal and external open
10
* flags are split.
11
* -Eric Paris
12
*/
13
14
/*
15
* When introducing new O_* bits, please check its uniqueness in fcntl_init().
16
*/
17
18
#define O_ACCMODE 00000003
19
#define O_RDONLY 00000000
20
#define O_WRONLY 00000001
21
#define O_RDWR 00000002
22
#ifndef O_CREAT
23
#define O_CREAT 00000100 /* not fcntl */
24
#endif
25
#ifndef O_EXCL
26
#define O_EXCL 00000200 /* not fcntl */
27
#endif
28
#ifndef O_NOCTTY
29
#define O_NOCTTY 00000400 /* not fcntl */
30
#endif
31
#ifndef O_TRUNC
32
#define O_TRUNC 00001000 /* not fcntl */
33
#endif
34
#ifndef O_APPEND
35
#define O_APPEND 00002000
36
#endif
37
#ifndef O_NONBLOCK
38
#define O_NONBLOCK 00004000
39
#endif
40
#ifndef O_DSYNC
41
#define O_DSYNC 00010000 /* used to be O_SYNC, see below */
42
#endif
43
#ifndef FASYNC
44
#define FASYNC 00020000 /* fcntl, for BSD compatibility */
45
#endif
46
#ifndef O_DIRECT
47
#define O_DIRECT 00040000 /* direct disk access hint */
48
#endif
49
#ifndef O_LARGEFILE
50
#define O_LARGEFILE 00100000
51
#endif
52
#ifndef O_DIRECTORY
53
#define O_DIRECTORY 00200000 /* must be a directory */
54
#endif
55
#ifndef O_NOFOLLOW
56
#define O_NOFOLLOW 00400000 /* don't follow links */
57
#endif
58
#ifndef O_NOATIME
59
#define O_NOATIME 01000000
60
#endif
61
#ifndef O_CLOEXEC
62
#define O_CLOEXEC 02000000 /* set close_on_exec */
63
#endif
64
65
/*
66
* Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using
67
* the O_SYNC flag. We continue to use the existing numerical value
68
* for O_DSYNC semantics now, but using the correct symbolic name for it.
69
* This new value is used to request true Posix O_SYNC semantics. It is
70
* defined in this strange way to make sure applications compiled against
71
* new headers get at least O_DSYNC semantics on older kernels.
72
*
73
* This has the nice side-effect that we can simply test for O_DSYNC
74
* wherever we do not care if O_DSYNC or O_SYNC is used.
75
*
76
* Note: __O_SYNC must never be used directly.
77
*/
78
#ifndef O_SYNC
79
#define __O_SYNC 04000000
80
#define O_SYNC (__O_SYNC|O_DSYNC)
81
#endif
82
83
#ifndef O_PATH
84
#define O_PATH 010000000
85
#endif
86
87
#ifndef __O_TMPFILE
88
#define __O_TMPFILE 020000000
89
#endif
90
91
/* a horrid kludge trying to make sure that this will fail on old kernels */
92
#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
93
94
#ifndef O_NDELAY
95
#define O_NDELAY O_NONBLOCK
96
#endif
97
98
#define F_DUPFD 0 /* dup */
99
#define F_GETFD 1 /* get close_on_exec */
100
#define F_SETFD 2 /* set/clear close_on_exec */
101
#define F_GETFL 3 /* get file->f_flags */
102
#define F_SETFL 4 /* set file->f_flags */
103
#ifndef F_GETLK
104
#define F_GETLK 5
105
#define F_SETLK 6
106
#define F_SETLKW 7
107
#endif
108
#ifndef F_SETOWN
109
#define F_SETOWN 8 /* for sockets. */
110
#define F_GETOWN 9 /* for sockets. */
111
#endif
112
#ifndef F_SETSIG
113
#define F_SETSIG 10 /* for sockets. */
114
#define F_GETSIG 11 /* for sockets. */
115
#endif
116
117
#if __BITS_PER_LONG == 32 || defined(__KERNEL__)
118
#ifndef F_GETLK64
119
#define F_GETLK64 12 /* using 'struct flock64' */
120
#define F_SETLK64 13
121
#define F_SETLKW64 14
122
#endif
123
#endif /* __BITS_PER_LONG == 32 || defined(__KERNEL__) */
124
125
#ifndef F_SETOWN_EX
126
#define F_SETOWN_EX 15
127
#define F_GETOWN_EX 16
128
#endif
129
130
#ifndef F_GETOWNER_UIDS
131
#define F_GETOWNER_UIDS 17
132
#endif
133
134
/*
135
* Open File Description Locks
136
*
137
* Usually record locks held by a process are released on *any* close and are
138
* not inherited across a fork().
139
*
140
* These cmd values will set locks that conflict with process-associated
141
* record locks, but are "owned" by the open file description, not the
142
* process. This means that they are inherited across fork() like BSD (flock)
143
* locks, and they are only released automatically when the last reference to
144
* the the open file against which they were acquired is put.
145
*/
146
#define F_OFD_GETLK 36
147
#define F_OFD_SETLK 37
148
#define F_OFD_SETLKW 38
149
150
#define F_OWNER_TID 0
151
#define F_OWNER_PID 1
152
#define F_OWNER_PGRP 2
153
154
struct f_owner_ex {
155
int type;
156
__kernel_pid_t pid;
157
};
158
159
/* for F_[GET|SET]FL */
160
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
161
162
/* for posix fcntl() and lockf() */
163
#ifndef F_RDLCK
164
#define F_RDLCK 0
165
#define F_WRLCK 1
166
#define F_UNLCK 2
167
#endif
168
169
/* for old implementation of bsd flock () */
170
#ifndef F_EXLCK
171
#define F_EXLCK 4 /* or 3 */
172
#define F_SHLCK 8 /* or 4 */
173
#endif
174
175
/* operations for bsd flock(), also used by the kernel implementation */
176
#define LOCK_SH 1 /* shared lock */
177
#define LOCK_EX 2 /* exclusive lock */
178
#define LOCK_NB 4 /* or'd with one of the above to prevent
179
blocking */
180
#define LOCK_UN 8 /* remove lock */
181
182
/*
183
* LOCK_MAND support has been removed from the kernel. We leave the symbols
184
* here to not break legacy builds, but these should not be used in new code.
185
*/
186
#define LOCK_MAND 32 /* This is a mandatory flock ... */
187
#define LOCK_READ 64 /* which allows concurrent read operations */
188
#define LOCK_WRITE 128 /* which allows concurrent write operations */
189
#define LOCK_RW 192 /* which allows concurrent read & write ops */
190
191
#define F_LINUX_SPECIFIC_BASE 1024
192
193
#ifndef HAVE_ARCH_STRUCT_FLOCK
194
struct flock {
195
short l_type;
196
short l_whence;
197
__kernel_off_t l_start;
198
__kernel_off_t l_len;
199
__kernel_pid_t l_pid;
200
#ifdef __ARCH_FLOCK_EXTRA_SYSID
201
__ARCH_FLOCK_EXTRA_SYSID
202
#endif
203
#ifdef __ARCH_FLOCK_PAD
204
__ARCH_FLOCK_PAD
205
#endif
206
};
207
208
struct flock64 {
209
short l_type;
210
short l_whence;
211
__kernel_loff_t l_start;
212
__kernel_loff_t l_len;
213
__kernel_pid_t l_pid;
214
#ifdef __ARCH_FLOCK64_PAD
215
__ARCH_FLOCK64_PAD
216
#endif
217
};
218
#endif /* HAVE_ARCH_STRUCT_FLOCK */
219
220
#endif /* _ASM_GENERIC_FCNTL_H */
221
222