1: /*- 2: * Copyright (c) 1983, 1990, 1993 3: * The Regents of the University of California. All rights reserved. 4: * (c) UNIX System Laboratories, Inc. 5: * All or some portions of this file are derived from material licensed 6: * to the University of California by American Telephone and Telegraph 7: * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8: * the permission of UNIX System Laboratories, Inc. 9: * 10: * Redistribution and use in source and binary forms, with or without 11: * modification, are permitted provided that the following conditions 12: * are met: 13: * 1. Redistributions of source code must retain the above copyright 14: * notice, this list of conditions and the following disclaimer. 15: * 2. Redistributions in binary form must reproduce the above copyright 16: * notice, this list of conditions and the following disclaimer in the 17: * documentation and/or other materials provided with the distribution. 18: * 3. All advertising materials mentioning features or use of this software 19: * must display the following acknowledgement: 20: * This product includes software developed by the University of 21: * California, Berkeley and its contributors. 22: * 4. Neither the name of the University nor the names of its contributors 23: * may be used to endorse or promote products derived from this software 24: * without specific prior written permission. 25: * 26: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 27: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 30: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36: * SUCH DAMAGE. 37: * 38: * @(#)fcntl.h 8.3.1 (2.11BSD GTE) 11/25/94 39: * 40: * Copied from 4.4-Lite and modified for 2.11BSD. The modifications consisted 41: * of removing: function prototypes (I don't like them, the compiler does not 42: * support them, and it would mean dragging in cdefs.h to leave them in here), 43: * #ifndef _POSIX_SOURCE lines (silly) and record locking related definitions 44: * If anyone adds any of the above it will be easy enough to modify this file. 45: * In the meantime why bog down (or blow up) cpp any further? 46: */ 47: 48: #ifndef _FCNTL_H_ 49: #define _FCNTL_H_ 50: 51: /* 52: * This file includes the definitions for open and fcntl 53: * described by POSIX for <fcntl.h>; it also includes 54: * related kernel definitions. 55: */ 56: 57: #ifndef KERNEL 58: #include <sys/types.h> 59: #endif 60: 61: /* 62: * File status flags: these are used by open(2), fcntl(2). 63: * They are also used (indirectly) in the kernel file structure f_flags, 64: * which is a superset of the open/fcntl flags. Open flags and f_flags 65: * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags). 66: * Open/fcntl flags begin with O_; kernel-internal flags begin with F. 67: */ 68: /* open-only flags */ 69: #define O_RDONLY 0x0000 /* open for reading only */ 70: #define O_WRONLY 0x0001 /* open for writing only */ 71: #define O_RDWR 0x0002 /* open for reading and writing */ 72: #define O_ACCMODE 0x0003 /* mask for above modes */ 73: 74: /* 75: * Kernel encoding of open mode; separate read and write bits that are 76: * independently testable: 1 greater than the above. 77: * 78: * XXX 79: * FREAD and FWRITE are excluded from the #ifdef KERNEL so that TIOCFLUSH, 80: * which was documented to use FREAD/FWRITE, continues to work. 81: */ 82: #define FREAD 0x0001 83: #define FWRITE 0x0002 84: #define O_NONBLOCK 0x0004 /* no delay */ 85: #define O_APPEND 0x0008 /* set append mode */ 86: #define O_SHLOCK 0x0010 /* open with shared file lock */ 87: #define O_EXLOCK 0x0020 /* open with exclusive file lock */ 88: #define O_ASYNC 0x0040 /* signal pgrp when data ready */ 89: #define O_FSYNC 0x0080 /* synchronous writes */ 90: #define O_CREAT 0x0200 /* create if nonexistant */ 91: #define O_TRUNC 0x0400 /* truncate to zero length */ 92: #define O_EXCL 0x0800 /* error if already exists */ 93: #ifdef KERNEL 94: #define FMARK 0x1000 /* mark during gc() */ 95: #define FDEFER 0x2000 /* defer for next gc pass */ 96: #endif 97: 98: /* defined by POSIX 1003.1; not 2.11BSD default, so bit is required */ 99: /* Not currently implemented but it may be placed on the TODO list shortly */ 100: #define O_NOCTTY 0x4000 /* don't assign controlling terminal */ 101: 102: #ifdef KERNEL 103: /* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */ 104: #define FFLAGS(oflags) ((oflags) + 1) 105: #define OFLAGS(fflags) ((fflags) - 1) 106: 107: /* bits to save after open */ 108: #define FMASK (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK) 109: /* bits settable by fcntl(F_SETFL, ...) */ 110: #define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK) 111: #endif 112: 113: /* 114: * The O_* flags used to have only F* names, which were used in the kernel 115: * and by fcntl. We retain the F* names for the kernel f_flags field 116: * and for backward compatibility for fcntl. 117: */ 118: #define FAPPEND O_APPEND /* kernel/compat */ 119: #define FASYNC O_ASYNC /* kernel/compat */ 120: #define FFSYNC O_FSYNC /* kernel */ 121: #define FEXLOCK O_EXLOCK /* kernel */ 122: #define FSHLOCK O_SHLOCK /* kernel */ 123: #define FNONBLOCK O_NONBLOCK /* kernel */ 124: #define FNDELAY O_NONBLOCK /* compat */ 125: #define O_NDELAY O_NONBLOCK /* compat */ 126: 127: /* 128: * Constants used for fcntl(2) 129: */ 130: 131: /* command values */ 132: #define F_DUPFD 0 /* duplicate file descriptor */ 133: #define F_GETFD 1 /* get file descriptor flags */ 134: #define F_SETFD 2 /* set file descriptor flags */ 135: #define F_GETFL 3 /* get file status flags */ 136: #define F_SETFL 4 /* set file status flags */ 137: #define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */ 138: #define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */ 139: 140: /* file descriptor flags (F_GETFD, F_SETFD) */ 141: #define FD_CLOEXEC 1 /* close-on-exec flag */ 142: 143: /* lock operations for flock(2) */ 144: #define LOCK_SH 0x01 /* shared file lock */ 145: #define LOCK_EX 0x02 /* exclusive file lock */ 146: #define LOCK_NB 0x04 /* don't block when locking */ 147: #define LOCK_UN 0x08 /* unlock file */ 148: #endif /* !_FCNTL_H_ */