Annotation of sys/sys/fcntl.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: fcntl.h,v 1.10 2005/12/13 00:35:23 millert Exp $ */
2: /* $NetBSD: fcntl.h,v 1.8 1995/03/26 20:24:12 jtc Exp $ */
3:
4: /*-
5: * Copyright (c) 1983, 1990, 1993
6: * The Regents of the University of California. All rights reserved.
7: * (c) UNIX System Laboratories, Inc.
8: * All or some portions of this file are derived from material licensed
9: * to the University of California by American Telephone and Telegraph
10: * Co. or Unix System Laboratories, Inc. and are reproduced herein with
11: * the permission of UNIX System Laboratories, Inc.
12: *
13: * Redistribution and use in source and binary forms, with or without
14: * modification, are permitted provided that the following conditions
15: * are met:
16: * 1. Redistributions of source code must retain the above copyright
17: * notice, this list of conditions and the following disclaimer.
18: * 2. Redistributions in binary form must reproduce the above copyright
19: * notice, this list of conditions and the following disclaimer in the
20: * documentation and/or other materials provided with the distribution.
21: * 3. Neither the name of the University nor the names of its contributors
22: * may be used to endorse or promote products derived from this software
23: * without specific prior written permission.
24: *
25: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35: * SUCH DAMAGE.
36: *
37: * @(#)fcntl.h 8.3 (Berkeley) 1/21/94
38: */
39:
40: #ifndef _SYS_FCNTL_H_
41: #define _SYS_FCNTL_H_
42:
43: /*
44: * This file includes the definitions for open and fcntl
45: * described by POSIX for <fcntl.h>; it also includes
46: * related kernel definitions.
47: */
48:
49: #include <sys/cdefs.h>
50: #ifndef _KERNEL
51: #include <sys/types.h>
52: #endif
53:
54: /*
55: * File status flags: these are used by open(2), fcntl(2).
56: * They are also used (indirectly) in the kernel file structure f_flags,
57: * which is a superset of the open/fcntl flags. Open flags and f_flags
58: * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
59: * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
60: */
61: /* open-only flags */
62: #define O_RDONLY 0x0000 /* open for reading only */
63: #define O_WRONLY 0x0001 /* open for writing only */
64: #define O_RDWR 0x0002 /* open for reading and writing */
65: #define O_ACCMODE 0x0003 /* mask for above modes */
66:
67: /*
68: * Kernel encoding of open mode; separate read and write bits that are
69: * independently testable: 1 greater than the above.
70: *
71: * XXX
72: * FREAD and FWRITE are excluded from the #ifdef _KERNEL so that TIOCFLUSH,
73: * which was documented to use FREAD/FWRITE, continues to work.
74: */
75: #if __BSD_VISIBLE
76: #define FREAD 0x0001
77: #define FWRITE 0x0002
78: #endif
79: #define O_NONBLOCK 0x0004 /* no delay */
80: #define O_APPEND 0x0008 /* set append mode */
81: #if __BSD_VISIBLE
82: #define O_SHLOCK 0x0010 /* open with shared file lock */
83: #define O_EXLOCK 0x0020 /* open with exclusive file lock */
84: #define O_ASYNC 0x0040 /* signal pgrp when data ready */
85: #define O_FSYNC 0x0080 /* backwards compatibility */
86: #define O_NOFOLLOW 0x0100 /* if path is a symlink, don't follow */
87: #endif
88: #if __POSIX_VISIBLE >= 199309 || __XPG_VISIBLE >= 420
89: #define O_SYNC 0x0080 /* synchronous writes */
90: #endif
91: #define O_CREAT 0x0200 /* create if nonexistant */
92: #define O_TRUNC 0x0400 /* truncate to zero length */
93: #define O_EXCL 0x0800 /* error if already exists */
94: #ifdef _KERNEL
95: #define FMARK 0x1000 /* mark during gc() */
96: #define FDEFER 0x2000 /* defer for next gc pass */
97: #define FHASLOCK 0x4000 /* descriptor holds advisory lock */
98: #endif
99:
100: /*
101: * POSIX 1003.1 specifies a higher granularity for synchronous operations
102: * than we support. Since synchronicity is all or nothing in OpenBSD
103: * we just define these to be the same as O_SYNC.
104: */
105: #define O_DSYNC O_SYNC /* synchronous data writes */
106: #define O_RSYNC O_SYNC /* synchronous reads */
107:
108: /* defined by POSIX 1003.1; BSD default, this bit is not required */
109: #define O_NOCTTY 0x8000 /* don't assign controlling terminal */
110:
111: #ifdef _KERNEL
112: /*
113: * convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE.
114: * For out-of-range values for the flags, be slightly careful (but lossy).
115: */
116: #define FFLAGS(oflags) (((oflags) & ~O_ACCMODE) | (((oflags) + 1) & O_ACCMODE))
117: #define OFLAGS(fflags) (((fflags) & ~O_ACCMODE) | (((fflags) - 1) & O_ACCMODE))
118:
119: /* bits to save after open */
120: #define FMASK (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
121: /* bits settable by fcntl(F_SETFL, ...) */
122: #define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
123: #endif
124:
125: /*
126: * The O_* flags used to have only F* names, which were used in the kernel
127: * and by fcntl. We retain the F* names for the kernel f_flags field
128: * and for backward compatibility for fcntl.
129: */
130: #if __BSD_VISIBLE
131: #define FAPPEND O_APPEND /* kernel/compat */
132: #define FASYNC O_ASYNC /* kernel/compat */
133: #define FFSYNC O_SYNC /* kernel */
134: #define FNONBLOCK O_NONBLOCK /* kernel */
135: #define FNDELAY O_NONBLOCK /* compat */
136: #define O_NDELAY O_NONBLOCK /* compat */
137: #endif
138:
139: /*
140: * Constants used for fcntl(2)
141: */
142:
143: /* command values */
144: #define F_DUPFD 0 /* duplicate file descriptor */
145: #define F_GETFD 1 /* get file descriptor flags */
146: #define F_SETFD 2 /* set file descriptor flags */
147: #define F_GETFL 3 /* get file status flags */
148: #define F_SETFL 4 /* set file status flags */
149: #if __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE >= 500
150: #define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */
151: #define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */
152: #endif
153: #define F_GETLK 7 /* get record locking information */
154: #define F_SETLK 8 /* set record locking information */
155: #define F_SETLKW 9 /* F_SETLK; wait if blocked */
156:
157: /* file descriptor flags (F_GETFD, F_SETFD) */
158: #define FD_CLOEXEC 1 /* close-on-exec flag */
159:
160: /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
161: #define F_RDLCK 1 /* shared or read lock */
162: #define F_UNLCK 2 /* unlock */
163: #define F_WRLCK 3 /* exclusive or write lock */
164: #ifdef _KERNEL
165: #define F_WAIT 0x010 /* Wait until lock is granted */
166: #define F_FLOCK 0x020 /* Use flock(2) semantics for lock */
167: #define F_POSIX 0x040 /* Use POSIX semantics for lock */
168: #endif
169:
170: /*
171: * Advisory file segment locking data type -
172: * information passed to system by user
173: */
174: struct flock {
175: off_t l_start; /* starting offset */
176: off_t l_len; /* len = 0 means until end of file */
177: pid_t l_pid; /* lock owner */
178: short l_type; /* lock type: read/write, etc. */
179: short l_whence; /* type of l_start */
180: };
181:
182:
183: #if __BSD_VISIBLE
184: /* lock operations for flock(2) */
185: #define LOCK_SH 0x01 /* shared file lock */
186: #define LOCK_EX 0x02 /* exclusive file lock */
187: #define LOCK_NB 0x04 /* don't block when locking */
188: #define LOCK_UN 0x08 /* unlock file */
189: #endif
190:
191:
192: #ifndef _KERNEL
193: __BEGIN_DECLS
194: int open(const char *, int, ...);
195: int creat(const char *, mode_t);
196: int fcntl(int, int, ...);
197: #if __BSD_VISIBLE
198: int flock(int, int);
199: #endif
200: __END_DECLS
201: #endif
202:
203: #endif /* !_SYS_FCNTL_H_ */
CVSweb