fcntl.h revision 13765
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 (Berkeley) 1/21/94 39 * $Id: fcntl.h,v 1.2 1994/08/02 07:52:57 davidg Exp $ 40 */ 41 42#ifndef _SYS_FCNTL_H_ 43#define _SYS_FCNTL_H_ 44 45/* 46 * This file includes the definitions for open and fcntl 47 * described by POSIX for <fcntl.h>; it also includes 48 * related kernel definitions. 49 */ 50 51#ifndef KERNEL 52#include <sys/types.h> 53#endif 54 55/* 56 * File status flags: these are used by open(2), fcntl(2). 57 * They are also used (indirectly) in the kernel file structure f_flags, 58 * which is a superset of the open/fcntl flags. Open flags and f_flags 59 * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags). 60 * Open/fcntl flags begin with O_; kernel-internal flags begin with F. 61 */ 62/* open-only flags */ 63#define O_RDONLY 0x0000 /* open for reading only */ 64#define O_WRONLY 0x0001 /* open for writing only */ 65#define O_RDWR 0x0002 /* open for reading and writing */ 66#define O_ACCMODE 0x0003 /* mask for above modes */ 67 68/* 69 * Kernel encoding of open mode; separate read and write bits that are 70 * independently testable: 1 greater than the above. 71 * 72 * XXX 73 * FREAD and FWRITE are excluded from the #ifdef KERNEL so that TIOCFLUSH, 74 * which was documented to use FREAD/FWRITE, continues to work. 75 */ 76#ifndef _POSIX_SOURCE 77#define FREAD 0x0001 78#define FWRITE 0x0002 79#endif 80#define O_NONBLOCK 0x0004 /* no delay */ 81#define O_APPEND 0x0008 /* set append mode */ 82#ifndef _POSIX_SOURCE 83#define O_SHLOCK 0x0010 /* open with shared file lock */ 84#define O_EXLOCK 0x0020 /* open with exclusive file lock */ 85#define O_ASYNC 0x0040 /* signal pgrp when data ready */ 86#define O_FSYNC 0x0080 /* synchronous writes */ 87#endif 88#define O_CREAT 0x0200 /* create if nonexistent */ 89#define O_TRUNC 0x0400 /* truncate to zero length */ 90#define O_EXCL 0x0800 /* error if already exists */ 91#ifdef KERNEL 92#define FMARK 0x1000 /* mark during gc() */ 93#define FDEFER 0x2000 /* defer for next gc pass */ 94#define FHASLOCK 0x4000 /* descriptor holds advisory lock */ 95#endif 96 97/* defined by POSIX 1003.1; BSD default, so no bit required */ 98#define O_NOCTTY 0 /* don't assign controlling terminal */ 99 100#ifdef KERNEL 101/* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */ 102#define FFLAGS(oflags) ((oflags) + 1) 103#define OFLAGS(fflags) ((fflags) - 1) 104 105/* bits to save after open */ 106#define FMASK (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK) 107/* bits settable by fcntl(F_SETFL, ...) */ 108#define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK) 109#endif 110 111/* 112 * The O_* flags used to have only F* names, which were used in the kernel 113 * and by fcntl. We retain the F* names for the kernel f_flags field 114 * and for backward compatibility for fcntl. 115 */ 116#ifndef _POSIX_SOURCE 117#define FAPPEND O_APPEND /* kernel/compat */ 118#define FASYNC O_ASYNC /* kernel/compat */ 119#define FFSYNC O_FSYNC /* kernel */ 120#define FNONBLOCK O_NONBLOCK /* kernel */ 121#define FNDELAY O_NONBLOCK /* compat */ 122#define O_NDELAY O_NONBLOCK /* compat */ 123#endif 124 125/* 126 * Constants used for fcntl(2) 127 */ 128 129/* command values */ 130#define F_DUPFD 0 /* duplicate file descriptor */ 131#define F_GETFD 1 /* get file descriptor flags */ 132#define F_SETFD 2 /* set file descriptor flags */ 133#define F_GETFL 3 /* get file status flags */ 134#define F_SETFL 4 /* set file status flags */ 135#ifndef _POSIX_SOURCE 136#define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */ 137#define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */ 138#endif 139#define F_GETLK 7 /* get record locking information */ 140#define F_SETLK 8 /* set record locking information */ 141#define F_SETLKW 9 /* F_SETLK; wait if blocked */ 142 143/* file descriptor flags (F_GETFD, F_SETFD) */ 144#define FD_CLOEXEC 1 /* close-on-exec flag */ 145 146/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */ 147#define F_RDLCK 1 /* shared or read lock */ 148#define F_UNLCK 2 /* unlock */ 149#define F_WRLCK 3 /* exclusive or write lock */ 150#ifdef KERNEL 151#define F_WAIT 0x010 /* Wait until lock is granted */ 152#define F_FLOCK 0x020 /* Use flock(2) semantics for lock */ 153#define F_POSIX 0x040 /* Use POSIX semantics for lock */ 154#endif 155 156/* 157 * Advisory file segment locking data type - 158 * information passed to system by user 159 */ 160struct flock { 161 off_t l_start; /* starting offset */ 162 off_t l_len; /* len = 0 means until end of file */ 163 pid_t l_pid; /* lock owner */ 164 short l_type; /* lock type: read/write, etc. */ 165 short l_whence; /* type of l_start */ 166}; 167 168 169#ifndef _POSIX_SOURCE 170/* lock operations for flock(2) */ 171#define LOCK_SH 0x01 /* shared file lock */ 172#define LOCK_EX 0x02 /* exclusive file lock */ 173#define LOCK_NB 0x04 /* don't block when locking */ 174#define LOCK_UN 0x08 /* unlock file */ 175#endif 176 177 178#ifndef KERNEL 179#include <sys/cdefs.h> 180 181__BEGIN_DECLS 182int open __P((const char *, int, ...)); 183int creat __P((const char *, mode_t)); 184int fcntl __P((int, int, ...)); 185#ifndef _POSIX_SOURCE 186int flock __P((int, int)); 187#endif /* !_POSIX_SOURCE */ 188__END_DECLS 189#endif 190 191#endif /* !_SYS_FCNTL_H_ */ 192