Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / sys / fcntl.h @ 13

History | View | Annotate | Download (12.2 KB)

1 13 up20180614
/*        $NetBSD: fcntl.h,v 1.46 2013/09/15 10:41:20 njoly Exp $        */
2
3
/*-
4
 * Copyright (c) 1983, 1990, 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
 *        @(#)fcntl.h        8.3 (Berkeley) 1/21/94
37
 */
38
39
#ifndef _SYS_FCNTL_H_
40
#define        _SYS_FCNTL_H_
41
42
/*
43
 * This file includes the definitions for open and fcntl
44
 * described by POSIX for <fcntl.h>; it also includes
45
 * related kernel definitions.
46
 */
47
48
#ifndef _KERNEL
49
#include <sys/featuretest.h>
50
#include <sys/types.h>
51
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
52
#include <sys/stat.h>
53
#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
54
#endif /* !_KERNEL */
55
56
/*
57
 * File status flags: these are used by open(2), fcntl(2).
58
 * They are also used (indirectly) in the kernel file structure f_flags,
59
 * which is a superset of the open/fcntl flags.  Open flags and f_flags
60
 * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
61
 * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
62
 */
63
/* open-only flags */
64
#define        O_RDONLY        0x00000000        /* open for reading only */
65
#define        O_WRONLY        0x00000001        /* open for writing only */
66
#define        O_RDWR                0x00000002        /* open for reading and writing */
67
#define        O_ACCMODE        0x00000003        /* mask for above modes */
68
69
/*
70
 * Kernel encoding of open mode; separate read and write bits that are
71
 * independently testable: 1 greater than the above.
72
 *
73
 * XXX
74
 * FREAD and FWRITE are excluded from the #ifdef _KERNEL so that TIOCFLUSH,
75
 * which was documented to use FREAD/FWRITE, continues to work.
76
 */
77
#if defined(_NETBSD_SOURCE)
78
#define        FREAD                0x00000001
79
#define        FWRITE                0x00000002
80
#endif
81
#define        O_NONBLOCK        0x00000004        /* no delay */
82
#define        O_APPEND        0x00000008        /* set append mode */
83
#if defined(_NETBSD_SOURCE)
84
#define        O_SHLOCK        0x00000010        /* open with shared file lock */
85
#if !defined(__minix) || 1
86
#define        O_EXLOCK        0x00000020        /* open with exclusive file lock */
87
#endif /* !defined(__minix) */
88
#define        O_ASYNC                0x00000040        /* signal pgrp when data ready */
89
#endif
90
#if (_POSIX_C_SOURCE - 0) >= 199309L || \
91
    (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
92
    (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
93
#define        O_SYNC                0x00000080        /* synchronous writes */
94
#endif
95
#if defined(_NETBSD_SOURCE)
96
#define        O_NOFOLLOW        0x00000100        /* don't follow symlinks on the last */
97
                                        /* path component */
98
#endif
99
#define        O_CREAT                0x00000200        /* create if nonexistent */
100
#define        O_TRUNC                0x00000400        /* truncate to zero length */
101
#define        O_EXCL                0x00000800        /* error if already exists */
102
103
/* defined by POSIX 1003.1; BSD default, but required to be bitwise distinct */
104
#define        O_NOCTTY        0x00008000        /* don't assign controlling terminal */
105
106
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
107
    defined(_NETBSD_SOURCE)
108
#define        O_DSYNC                0x00010000        /* write: I/O data completion */
109
#define        O_RSYNC                0x00020000        /* read: I/O completion as for write */
110
#endif
111
112
#if defined(_NETBSD_SOURCE)
113
#define        O_ALT_IO        0x00040000        /* use alternate i/o semantics */
114
#define        O_DIRECT        0x00080000        /* direct I/O hint */
115
#endif
116
117
#define        O_DIRECTORY        0x00200000        /* fail if not a directory */
118
#define        O_CLOEXEC        0x00400000        /* set close on exec */
119
#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0 >= 700) || \
120
    defined(_INCOMPLETE_XOPEN_C063) || defined(_NETBSD_SOURCE)
121
#define        O_SEARCH        0x00800000        /* skip search permission checks */
122
#endif
123
#if defined(_NETBSD_SOURCE)
124
#define        O_NOSIGPIPE        0x01000000        /* don't deliver sigpipe */
125
#endif
126
127
#ifdef _KERNEL
128
/* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
129
#define        FFLAGS(oflags)        ((oflags) + 1)
130
#define        OFLAGS(fflags)        ((fflags) - 1)
131
132
/* all bits settable during open(2) */
133
#define        O_MASK                (O_ACCMODE|O_NONBLOCK|O_APPEND|O_SHLOCK|O_EXLOCK|\
134
                         O_ASYNC|O_SYNC|O_CREAT|O_TRUNC|O_EXCL|O_DSYNC|\
135
                         O_RSYNC|O_NOCTTY|O_ALT_IO|O_NOFOLLOW|O_DIRECT|\
136
                         O_DIRECTORY|O_CLOEXEC|O_NOSIGPIPE)
137
138
#define        FMARK                0x00001000        /* mark during gc() */
139
#define        FDEFER                0x00002000        /* defer for next gc pass */
140
#define        FHASLOCK        0x00004000        /* descriptor holds advisory lock */
141
#define        FSCAN                0x00100000        /* scan during gc passes */
142
#define        FSILENT                0x40000000        /* suppress kernel error messages */
143
#define        FKIOCTL                0x80000000        /* kernel originated ioctl */
144
/* bits settable by fcntl(F_SETFL, ...) */
145
#define        FCNTLFLAGS        (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FDSYNC|FRSYNC|FALTIO|\
146
                         FDIRECT|FNOSIGPIPE)
147
/* bits to save after open(2) */
148
#define        FMASK                (FREAD|FWRITE|FCNTLFLAGS)
149
#endif /* _KERNEL */
150
151
/*
152
 * The O_* flags used to have only F* names, which were used in the kernel
153
 * and by fcntl.  We retain the F* names for the kernel f_flags field
154
 * and for backward compatibility for fcntl.
155
 */
156
#if defined(_NETBSD_SOURCE)
157
#define        FAPPEND                O_APPEND        /* kernel/compat */
158
#define        FASYNC                O_ASYNC                /* kernel/compat */
159
#define        O_FSYNC                O_SYNC                /* compat */
160
#define        FNDELAY                O_NONBLOCK        /* compat */
161
#define        O_NDELAY        O_NONBLOCK        /* compat */
162
#endif
163
#if defined(_KERNEL)
164
#define        FNOSIGPIPE        O_NOSIGPIPE        /* kernel */
165
#define        FNONBLOCK        O_NONBLOCK        /* kernel */
166
#define        FFSYNC                O_SYNC                /* kernel */
167
#define        FDSYNC                O_DSYNC                /* kernel */
168
#define        FRSYNC                O_RSYNC                /* kernel */
169
#define        FALTIO                O_ALT_IO        /* kernel */
170
#define        FDIRECT                O_DIRECT        /* kernel */
171
#endif
172
173
/*
174
 * Constants used for fcntl(2)
175
 */
176
177
/* command values */
178
#define        F_DUPFD                0                /* duplicate file descriptor */
179
#define        F_GETFD                1                /* get file descriptor flags */
180
#define        F_SETFD                2                /* set file descriptor flags */
181
#define        F_GETFL                3                /* get file status flags */
182
#define        F_SETFL                4                /* set file status flags */
183
#if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 500 || \
184
    defined(_NETBSD_SOURCE)
185
#define        F_GETOWN        5                /* get SIGIO/SIGURG proc/pgrp */
186
#define        F_SETOWN        6                /* set SIGIO/SIGURG proc/pgrp */
187
#endif
188
#define        F_GETLK                7                /* get record locking information */
189
#define        F_SETLK                8                /* set record locking information */
190
#define        F_SETLKW        9                /* F_SETLK; wait if blocked */
191
#if defined(_NETBSD_SOURCE)
192
#define        F_CLOSEM        10                /* close all fds >= to the one given */
193
#define        F_MAXFD                11                /* return the max open fd */
194
#define        F_DUPFD_CLOEXEC        12                /* close on exec duplicated fd */
195
#define        F_GETNOSIGPIPE        13                /* get SIGPIPE disposition */
196
#define        F_SETNOSIGPIPE        14                /* set SIGPIPE disposition */
197
#endif
198
199
/* file descriptor flags (F_GETFD, F_SETFD) */
200
#define        FD_CLOEXEC        1                /* close-on-exec flag */
201
202
/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
203
#define        F_RDLCK                1                /* shared or read lock */
204
#define        F_UNLCK                2                /* unlock */
205
#define        F_WRLCK                3                /* exclusive or write lock */
206
#ifdef _KERNEL
207
#define        F_WAIT                0x010                /* Wait until lock is granted */
208
#define        F_FLOCK                0x020                 /* Use flock(2) semantics for lock */
209
#define        F_POSIX                0x040                 /* Use POSIX semantics for lock */
210
#endif
211
212
/* Constants for fcntl's passed to the underlying fs - like ioctl's. */
213
#if defined(_NETBSD_SOURCE)
214
#define        F_PARAM_MASK        0xfff
215
#define        F_PARAM_LEN(x)        (((x) >> 16) & F_PARAM_MASK)
216
#define        F_PARAM_MAX        4095
217
#define        F_FSCTL                (int)0x80000000        /* This fcntl goes to the fs */
218
#define        F_FSVOID        (int)0x40000000        /* no parameters */
219
#define        F_FSOUT                (int)0x20000000        /* copy out parameter */
220
#define        F_FSIN                (int)0x10000000        /* copy in parameter */
221
#define        F_FSINOUT        (F_FSIN | F_FSOUT)
222
#define        F_FSDIRMASK        (int)0x70000000        /* mask for IN/OUT/VOID */
223
#define        F_FSPRIV        (int)0x00008000        /* command is fs-specific */
224
225
/*
226
 * Define command macros for operations which, if implemented, must be
227
 * the same for all fs's.
228
 */
229
#define        _FCN(inout, num, len) \
230
                (F_FSCTL | inout | ((len & F_PARAM_MASK) << 16) | (num))
231
#define        _FCNO(c)        _FCN(F_FSVOID,        (c), 0)
232
#define        _FCNR(c, t)        _FCN(F_FSIN,        (c), (int)sizeof(t))
233
#define        _FCNW(c, t)        _FCN(F_FSOUT,        (c), (int)sizeof(t))
234
#define        _FCNRW(c, t)        _FCN(F_FSINOUT,        (c), (int)sizeof(t))
235
236
/*
237
 * Define command macros for fs-specific commands.
238
 */
239
#define        _FCN_FSPRIV(inout, fs, num, len) \
240
        (F_FSCTL | F_FSPRIV | inout | ((len & F_PARAM_MASK) << 16) |        \
241
         (fs) << 8 | (num))
242
#define        _FCNO_FSPRIV(f, c)        _FCN_FSPRIV(F_FSVOID,  (f), (c), 0)
243
#define        _FCNR_FSPRIV(f, c, t)        _FCN_FSPRIV(F_FSIN,    (f), (c), (int)sizeof(t))
244
#define        _FCNW_FSPRIV(f, c, t)        _FCN_FSPRIV(F_FSOUT,   (f), (c), (int)sizeof(t))
245
#define        _FCNRW_FSPRIV(f, c, t)        _FCN_FSPRIV(F_FSINOUT, (f), (c), (int)sizeof(t))
246
247
#endif /* _NETBSD_SOURCE */
248
249
/*
250
 * Advisory file segment locking data type -
251
 * information passed to system by user
252
 */
253
struct flock {
254
        off_t        l_start;        /* starting offset */
255
        off_t        l_len;                /* len = 0 means until end of file */
256
        pid_t        l_pid;                /* lock owner */
257
        short        l_type;                /* lock type: read/write, etc. */
258
        short        l_whence;        /* type of l_start */
259
};
260
261
262
#if defined(_NETBSD_SOURCE)
263
/* lock operations for flock(2) */
264
#define        LOCK_SH                0x01                /* shared file lock */
265
#define        LOCK_EX                0x02                /* exclusive file lock */
266
#define        LOCK_NB                0x04                /* don't block when locking */
267
#define        LOCK_UN                0x08                /* unlock file */
268
#endif
269
270
/* Always ensure that these are consistent with <stdio.h> and <unistd.h>! */
271
#ifndef        SEEK_SET
272
#define        SEEK_SET        0        /* set file offset to offset */
273
#endif
274
#ifndef        SEEK_CUR
275
#define        SEEK_CUR        1        /* set file offset to current plus offset */
276
#endif
277
#ifndef        SEEK_END
278
#define        SEEK_END        2        /* set file offset to EOF plus offset */
279
#endif
280
281
/*
282
 * posix_advise advisories.
283
 */
284
285
#define        POSIX_FADV_NORMAL        0        /* default advice / no advice */
286
#define        POSIX_FADV_RANDOM        1        /* random access */
287
#define        POSIX_FADV_SEQUENTIAL        2        /* sequential access(lower to higher) */
288
#define        POSIX_FADV_WILLNEED        3        /* be needed in near future */
289
#define        POSIX_FADV_DONTNEED        4        /* not be needed in near future */
290
#define        POSIX_FADV_NOREUSE        5        /* be accessed once */
291
292
/*
293
 * Constants for X/Open Extended API set 2 (a.k.a. C063)
294
 */
295
#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0 >= 700) || \
296
    defined(_INCOMPLETE_XOPEN_C063) || defined(_NETBSD_SOURCE)
297
#define        AT_FDCWD                -100        /* Use cwd for relative link target */
298
#define        AT_EACCESS                0x100        /* Use euig/egid for access checks */
299
#define        AT_SYMLINK_NOFOLLOW        0x200        /* Do not follow symlinks */
300
#define        AT_SYMLINK_FOLLOW        0x400        /* Follow symlinks */
301
#define        AT_REMOVEDIR                0x800        /* Remove directory only */
302
#endif
303
304
305
#ifndef _KERNEL
306
#include <sys/cdefs.h>
307
308
__BEGIN_DECLS
309
int        open(const char *, int, ...);
310
int        creat(const char *, mode_t);
311
int        fcntl(int, int, ...);
312
#if defined(_NETBSD_SOURCE)
313
int        flock(int, int);
314
#endif /* _NETBSD_SOURCE */
315
int        posix_fadvise(int, off_t, off_t, int);
316
317
/*
318
 * X/Open Extended API set 2 (a.k.a. C063)
319
 */
320
#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0 >= 700) || \
321
    defined(_INCOMPLETE_XOPEN_C063) || defined(_NETBSD_SOURCE)
322
int        openat(int, const char *, int, ...);
323
#endif
324
__END_DECLS
325
#endif /* !_KERNEL */
326
327
#if defined(__minix)
328
#define F_FREESP       100
329
#define F_FLUSH_FS_CACHE        101        /* invalidate cache on associated FS */
330
#endif /* defined(__minix) */
331
332
#endif /* !_SYS_FCNTL_H_ */