1199767f8SToomas Soome /*- 2199767f8SToomas Soome * Copyright (c) 1983, 1990, 1993 3199767f8SToomas Soome * The Regents of the University of California. All rights reserved. 4199767f8SToomas Soome * (c) UNIX System Laboratories, Inc. 5199767f8SToomas Soome * All or some portions of this file are derived from material licensed 6199767f8SToomas Soome * to the University of California by American Telephone and Telegraph 7199767f8SToomas Soome * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8199767f8SToomas Soome * the permission of UNIX System Laboratories, Inc. 9199767f8SToomas Soome * 10199767f8SToomas Soome * Redistribution and use in source and binary forms, with or without 11199767f8SToomas Soome * modification, are permitted provided that the following conditions 12199767f8SToomas Soome * are met: 13199767f8SToomas Soome * 1. Redistributions of source code must retain the above copyright 14199767f8SToomas Soome * notice, this list of conditions and the following disclaimer. 15199767f8SToomas Soome * 2. Redistributions in binary form must reproduce the above copyright 16199767f8SToomas Soome * notice, this list of conditions and the following disclaimer in the 17199767f8SToomas Soome * documentation and/or other materials provided with the distribution. 18199767f8SToomas Soome * 4. Neither the name of the University nor the names of its contributors 19199767f8SToomas Soome * may be used to endorse or promote products derived from this software 20199767f8SToomas Soome * without specific prior written permission. 21199767f8SToomas Soome * 22199767f8SToomas Soome * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23199767f8SToomas Soome * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24199767f8SToomas Soome * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25199767f8SToomas Soome * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26199767f8SToomas Soome * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27199767f8SToomas Soome * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28199767f8SToomas Soome * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29199767f8SToomas Soome * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30199767f8SToomas Soome * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31199767f8SToomas Soome * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32199767f8SToomas Soome * SUCH DAMAGE. 33199767f8SToomas Soome * 34199767f8SToomas Soome * @(#)fcntl.h 8.3 (Berkeley) 1/21/94 35199767f8SToomas Soome * $FreeBSD$ 36199767f8SToomas Soome */ 37199767f8SToomas Soome 38199767f8SToomas Soome #ifndef _SYS_FCNTL_H_ 39199767f8SToomas Soome #define _SYS_FCNTL_H_ 40199767f8SToomas Soome 41199767f8SToomas Soome /* 42199767f8SToomas Soome * This file includes the definitions for open and fcntl 43199767f8SToomas Soome * described by POSIX for <fcntl.h>; it also includes 44199767f8SToomas Soome * related kernel definitions. 45199767f8SToomas Soome */ 46199767f8SToomas Soome 47199767f8SToomas Soome #include <sys/cdefs.h> 48199767f8SToomas Soome #include <sys/_types.h> 49199767f8SToomas Soome 50199767f8SToomas Soome #ifndef _MODE_T_DECLARED 51199767f8SToomas Soome typedef __mode_t mode_t; 52199767f8SToomas Soome #define _MODE_T_DECLARED 53199767f8SToomas Soome #endif 54199767f8SToomas Soome 55199767f8SToomas Soome #ifndef _OFF_T_DECLARED 56199767f8SToomas Soome typedef __off_t off_t; 57199767f8SToomas Soome #define _OFF_T_DECLARED 58199767f8SToomas Soome #endif 59199767f8SToomas Soome 60199767f8SToomas Soome #ifndef _PID_T_DECLARED 61199767f8SToomas Soome typedef __pid_t pid_t; 62199767f8SToomas Soome #define _PID_T_DECLARED 63199767f8SToomas Soome #endif 64199767f8SToomas Soome 65199767f8SToomas Soome /* 66199767f8SToomas Soome * File status flags: these are used by open(2), fcntl(2). 67199767f8SToomas Soome * They are also used (indirectly) in the kernel file structure f_flags, 68199767f8SToomas Soome * which is a superset of the open/fcntl flags. Open flags and f_flags 69199767f8SToomas Soome * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags). 70199767f8SToomas Soome * Open/fcntl flags begin with O_; kernel-internal flags begin with F. 71199767f8SToomas Soome */ 72199767f8SToomas Soome /* open-only flags */ 73199767f8SToomas Soome #define O_RDONLY 0x0000 /* open for reading only */ 74199767f8SToomas Soome #define O_WRONLY 0x0001 /* open for writing only */ 75199767f8SToomas Soome #define O_RDWR 0x0002 /* open for reading and writing */ 76199767f8SToomas Soome #define O_ACCMODE 0x0003 /* mask for above modes */ 77199767f8SToomas Soome 78199767f8SToomas Soome /* 79199767f8SToomas Soome * Kernel encoding of open mode; separate read and write bits that are 80199767f8SToomas Soome * independently testable: 1 greater than the above. 81199767f8SToomas Soome * 82199767f8SToomas Soome * XXX 83199767f8SToomas Soome * FREAD and FWRITE are excluded from the #ifdef _KERNEL so that TIOCFLUSH, 84199767f8SToomas Soome * which was documented to use FREAD/FWRITE, continues to work. 85199767f8SToomas Soome */ 86199767f8SToomas Soome #if __BSD_VISIBLE 87199767f8SToomas Soome #define FREAD 0x0001 88199767f8SToomas Soome #define FWRITE 0x0002 89199767f8SToomas Soome #endif 90199767f8SToomas Soome #define O_NONBLOCK 0x0004 /* no delay */ 91199767f8SToomas Soome #define O_APPEND 0x0008 /* set append mode */ 92199767f8SToomas Soome #if __BSD_VISIBLE 93199767f8SToomas Soome #define O_SHLOCK 0x0010 /* open with shared file lock */ 94199767f8SToomas Soome #define O_EXLOCK 0x0020 /* open with exclusive file lock */ 95199767f8SToomas Soome #define O_ASYNC 0x0040 /* signal pgrp when data ready */ 96199767f8SToomas Soome #define O_FSYNC 0x0080 /* synchronous writes */ 97199767f8SToomas Soome #endif 98199767f8SToomas Soome #define O_SYNC 0x0080 /* POSIX synonym for O_FSYNC */ 99199767f8SToomas Soome #if __POSIX_VISIBLE >= 200809 100199767f8SToomas Soome #define O_NOFOLLOW 0x0100 /* don't follow symlinks */ 101199767f8SToomas Soome #endif 102199767f8SToomas Soome #define O_CREAT 0x0200 /* create if nonexistent */ 103199767f8SToomas Soome #define O_TRUNC 0x0400 /* truncate to zero length */ 104199767f8SToomas Soome #define O_EXCL 0x0800 /* error if already exists */ 105199767f8SToomas Soome #ifdef _KERNEL 106199767f8SToomas Soome #define FHASLOCK 0x4000 /* descriptor holds advisory lock */ 107199767f8SToomas Soome #endif 108199767f8SToomas Soome 109199767f8SToomas Soome /* Defined by POSIX 1003.1; BSD default, but must be distinct from O_RDONLY. */ 110199767f8SToomas Soome #define O_NOCTTY 0x8000 /* don't assign controlling terminal */ 111199767f8SToomas Soome 112199767f8SToomas Soome #if __BSD_VISIBLE 113199767f8SToomas Soome /* Attempt to bypass buffer cache */ 114199767f8SToomas Soome #define O_DIRECT 0x00010000 115199767f8SToomas Soome #endif 116199767f8SToomas Soome 117199767f8SToomas Soome #if __POSIX_VISIBLE >= 200809 118199767f8SToomas Soome #define O_DIRECTORY 0x00020000 /* Fail if not directory */ 119199767f8SToomas Soome #define O_EXEC 0x00040000 /* Open for execute only */ 120199767f8SToomas Soome #endif 121199767f8SToomas Soome #ifdef _KERNEL 122199767f8SToomas Soome #define FEXEC O_EXEC 123199767f8SToomas Soome #endif 124199767f8SToomas Soome 125199767f8SToomas Soome #if __POSIX_VISIBLE >= 200809 126199767f8SToomas Soome /* Defined by POSIX 1003.1-2008; BSD default, but reserve for future use. */ 127199767f8SToomas Soome #define O_TTY_INIT 0x00080000 /* Restore default termios attributes */ 128199767f8SToomas Soome 129199767f8SToomas Soome #define O_CLOEXEC 0x00100000 130199767f8SToomas Soome #endif 131199767f8SToomas Soome 132199767f8SToomas Soome #if __BSD_VISIBLE 133199767f8SToomas Soome #define O_VERIFY 0x00200000 /* open only after verification */ 134199767f8SToomas Soome #endif 135199767f8SToomas Soome 136199767f8SToomas Soome /* 137199767f8SToomas Soome * XXX missing O_DSYNC, O_RSYNC. 138199767f8SToomas Soome */ 139199767f8SToomas Soome 140199767f8SToomas Soome #ifdef _KERNEL 141199767f8SToomas Soome 142199767f8SToomas Soome /* Only for devfs d_close() flags. */ 143199767f8SToomas Soome #define FLASTCLOSE O_DIRECTORY 144199767f8SToomas Soome #define FREVOKE O_VERIFY 145199767f8SToomas Soome /* Only for fo_close() from half-succeeded open */ 146199767f8SToomas Soome #define FOPENFAILED O_TTY_INIT 147199767f8SToomas Soome 148199767f8SToomas Soome /* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */ 149199767f8SToomas Soome #define FFLAGS(oflags) ((oflags) & O_EXEC ? (oflags) : (oflags) + 1) 150199767f8SToomas Soome #define OFLAGS(fflags) ((fflags) & O_EXEC ? (fflags) : (fflags) - 1) 151199767f8SToomas Soome 152199767f8SToomas Soome /* bits to save after open */ 153199767f8SToomas Soome #define FMASK (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK|O_DIRECT|FEXEC) 154199767f8SToomas Soome /* bits settable by fcntl(F_SETFL, ...) */ 155199767f8SToomas Soome #define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FRDAHEAD|O_DIRECT) 156199767f8SToomas Soome 157199767f8SToomas Soome #if defined(COMPAT_FREEBSD7) || defined(COMPAT_FREEBSD6) || \ 158199767f8SToomas Soome defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) 159199767f8SToomas Soome /* 160199767f8SToomas Soome * Set by shm_open(3) in older libc's to get automatic MAP_ASYNC 161199767f8SToomas Soome * behavior for POSIX shared memory objects (which are otherwise 162199767f8SToomas Soome * implemented as plain files). 163199767f8SToomas Soome */ 164199767f8SToomas Soome #define FPOSIXSHM O_NOFOLLOW 165199767f8SToomas Soome #undef FCNTLFLAGS 166199767f8SToomas Soome #define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FPOSIXSHM|FRDAHEAD| \ 167199767f8SToomas Soome O_DIRECT) 168199767f8SToomas Soome #endif 169199767f8SToomas Soome #endif 170199767f8SToomas Soome 171199767f8SToomas Soome /* 172199767f8SToomas Soome * The O_* flags used to have only F* names, which were used in the kernel 173199767f8SToomas Soome * and by fcntl. We retain the F* names for the kernel f_flag field 174199767f8SToomas Soome * and for backward compatibility for fcntl. These flags are deprecated. 175199767f8SToomas Soome */ 176199767f8SToomas Soome #if __BSD_VISIBLE 177199767f8SToomas Soome #define FAPPEND O_APPEND /* kernel/compat */ 178199767f8SToomas Soome #define FASYNC O_ASYNC /* kernel/compat */ 179199767f8SToomas Soome #define FFSYNC O_FSYNC /* kernel */ 180199767f8SToomas Soome #define FNONBLOCK O_NONBLOCK /* kernel */ 181199767f8SToomas Soome #define FNDELAY O_NONBLOCK /* compat */ 182199767f8SToomas Soome #define O_NDELAY O_NONBLOCK /* compat */ 183199767f8SToomas Soome #endif 184199767f8SToomas Soome 185199767f8SToomas Soome /* 186199767f8SToomas Soome * We are out of bits in f_flag (which is a short). However, 187199767f8SToomas Soome * the flag bits not set in FMASK are only meaningful in the 188199767f8SToomas Soome * initial open syscall. Those bits can thus be given a 189199767f8SToomas Soome * different meaning for fcntl(2). 190199767f8SToomas Soome */ 191199767f8SToomas Soome #if __BSD_VISIBLE 192199767f8SToomas Soome /* Read ahead */ 193199767f8SToomas Soome #define FRDAHEAD O_CREAT 194199767f8SToomas Soome #endif 195199767f8SToomas Soome 196199767f8SToomas Soome #if __POSIX_VISIBLE >= 200809 197199767f8SToomas Soome /* 198199767f8SToomas Soome * Magic value that specify the use of the current working directory 199199767f8SToomas Soome * to determine the target of relative file paths in the openat() and 200199767f8SToomas Soome * similar syscalls. 201199767f8SToomas Soome */ 202199767f8SToomas Soome #define AT_FDCWD -100 203199767f8SToomas Soome 204199767f8SToomas Soome /* 205199767f8SToomas Soome * Miscellaneous flags for the *at() syscalls. 206199767f8SToomas Soome */ 207199767f8SToomas Soome #define AT_EACCESS 0x100 /* Check access using effective user and group ID */ 208199767f8SToomas Soome #define AT_SYMLINK_NOFOLLOW 0x200 /* Do not follow symbolic links */ 209199767f8SToomas Soome #define AT_SYMLINK_FOLLOW 0x400 /* Follow symbolic link */ 210199767f8SToomas Soome #define AT_REMOVEDIR 0x800 /* Remove directory instead of file */ 211199767f8SToomas Soome #endif 212199767f8SToomas Soome 213199767f8SToomas Soome /* 214199767f8SToomas Soome * Constants used for fcntl(2) 215199767f8SToomas Soome */ 216199767f8SToomas Soome 217199767f8SToomas Soome /* command values */ 218199767f8SToomas Soome #define F_DUPFD 0 /* duplicate file descriptor */ 219199767f8SToomas Soome #define F_GETFD 1 /* get file descriptor flags */ 220199767f8SToomas Soome #define F_SETFD 2 /* set file descriptor flags */ 221199767f8SToomas Soome #define F_GETFL 3 /* get file status flags */ 222199767f8SToomas Soome #define F_SETFL 4 /* set file status flags */ 223199767f8SToomas Soome #if __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 224199767f8SToomas Soome #define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */ 225199767f8SToomas Soome #define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */ 226199767f8SToomas Soome #endif 227199767f8SToomas Soome #if __BSD_VISIBLE 228199767f8SToomas Soome #define F_OGETLK 7 /* get record locking information */ 229199767f8SToomas Soome #define F_OSETLK 8 /* set record locking information */ 230199767f8SToomas Soome #define F_OSETLKW 9 /* F_SETLK; wait if blocked */ 231199767f8SToomas Soome #define F_DUP2FD 10 /* duplicate file descriptor to arg */ 232199767f8SToomas Soome #endif 233199767f8SToomas Soome #define F_GETLK 11 /* get record locking information */ 234199767f8SToomas Soome #define F_SETLK 12 /* set record locking information */ 235199767f8SToomas Soome #define F_SETLKW 13 /* F_SETLK; wait if blocked */ 236199767f8SToomas Soome #if __BSD_VISIBLE 237199767f8SToomas Soome #define F_SETLK_REMOTE 14 /* debugging support for remote locks */ 238199767f8SToomas Soome #define F_READAHEAD 15 /* read ahead */ 239199767f8SToomas Soome #define F_RDAHEAD 16 /* Darwin compatible read ahead */ 240199767f8SToomas Soome #endif 241199767f8SToomas Soome #if __POSIX_VISIBLE >= 200809 242199767f8SToomas Soome #define F_DUPFD_CLOEXEC 17 /* Like F_DUPFD, but FD_CLOEXEC is set */ 243199767f8SToomas Soome #endif 244199767f8SToomas Soome #if __BSD_VISIBLE 245199767f8SToomas Soome #define F_DUP2FD_CLOEXEC 18 /* Like F_DUP2FD, but FD_CLOEXEC is set */ 246199767f8SToomas Soome #endif 247199767f8SToomas Soome 248199767f8SToomas Soome /* file descriptor flags (F_GETFD, F_SETFD) */ 249199767f8SToomas Soome #define FD_CLOEXEC 1 /* close-on-exec flag */ 250199767f8SToomas Soome 251199767f8SToomas Soome /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */ 252199767f8SToomas Soome #define F_RDLCK 1 /* shared or read lock */ 253199767f8SToomas Soome #define F_UNLCK 2 /* unlock */ 254199767f8SToomas Soome #define F_WRLCK 3 /* exclusive or write lock */ 255199767f8SToomas Soome #if __BSD_VISIBLE 256*55fea89dSDan Cross #define F_UNLCKSYS 4 /* purge locks for a given system ID */ 257199767f8SToomas Soome #define F_CANCEL 5 /* cancel an async lock request */ 258199767f8SToomas Soome #endif 259199767f8SToomas Soome #ifdef _KERNEL 260199767f8SToomas Soome #define F_WAIT 0x010 /* Wait until lock is granted */ 261199767f8SToomas Soome #define F_FLOCK 0x020 /* Use flock(2) semantics for lock */ 262199767f8SToomas Soome #define F_POSIX 0x040 /* Use POSIX semantics for lock */ 263199767f8SToomas Soome #define F_REMOTE 0x080 /* Lock owner is remote NFS client */ 264199767f8SToomas Soome #define F_NOINTR 0x100 /* Ignore signals when waiting */ 265199767f8SToomas Soome #endif 266199767f8SToomas Soome 267199767f8SToomas Soome /* 268199767f8SToomas Soome * Advisory file segment locking data type - 269199767f8SToomas Soome * information passed to system by user 270199767f8SToomas Soome */ 271199767f8SToomas Soome struct flock { 272199767f8SToomas Soome off_t l_start; /* starting offset */ 273199767f8SToomas Soome off_t l_len; /* len = 0 means until end of file */ 274199767f8SToomas Soome pid_t l_pid; /* lock owner */ 275199767f8SToomas Soome short l_type; /* lock type: read/write, etc. */ 276199767f8SToomas Soome short l_whence; /* type of l_start */ 277199767f8SToomas Soome int l_sysid; /* remote system id or zero for local */ 278199767f8SToomas Soome }; 279199767f8SToomas Soome 280199767f8SToomas Soome #if __BSD_VISIBLE 281199767f8SToomas Soome /* 282199767f8SToomas Soome * Old advisory file segment locking data type, 283199767f8SToomas Soome * before adding l_sysid. 284199767f8SToomas Soome */ 285199767f8SToomas Soome struct __oflock { 286199767f8SToomas Soome off_t l_start; /* starting offset */ 287199767f8SToomas Soome off_t l_len; /* len = 0 means until end of file */ 288199767f8SToomas Soome pid_t l_pid; /* lock owner */ 289199767f8SToomas Soome short l_type; /* lock type: read/write, etc. */ 290199767f8SToomas Soome short l_whence; /* type of l_start */ 291199767f8SToomas Soome }; 292199767f8SToomas Soome #endif 293199767f8SToomas Soome 294199767f8SToomas Soome #if __BSD_VISIBLE 295199767f8SToomas Soome /* lock operations for flock(2) */ 296199767f8SToomas Soome #define LOCK_SH 0x01 /* shared file lock */ 297199767f8SToomas Soome #define LOCK_EX 0x02 /* exclusive file lock */ 298199767f8SToomas Soome #define LOCK_NB 0x04 /* don't block when locking */ 299199767f8SToomas Soome #define LOCK_UN 0x08 /* unlock file */ 300199767f8SToomas Soome #endif 301199767f8SToomas Soome 302199767f8SToomas Soome #if __POSIX_VISIBLE >= 200112 303199767f8SToomas Soome /* 304199767f8SToomas Soome * Advice to posix_fadvise 305199767f8SToomas Soome */ 306199767f8SToomas Soome #define POSIX_FADV_NORMAL 0 /* no special treatment */ 307199767f8SToomas Soome #define POSIX_FADV_RANDOM 1 /* expect random page references */ 308199767f8SToomas Soome #define POSIX_FADV_SEQUENTIAL 2 /* expect sequential page references */ 309199767f8SToomas Soome #define POSIX_FADV_WILLNEED 3 /* will need these pages */ 310199767f8SToomas Soome #define POSIX_FADV_DONTNEED 4 /* dont need these pages */ 311199767f8SToomas Soome #define POSIX_FADV_NOREUSE 5 /* access data only once */ 312199767f8SToomas Soome #endif 313199767f8SToomas Soome 314199767f8SToomas Soome #ifndef _KERNEL 315199767f8SToomas Soome __BEGIN_DECLS 316199767f8SToomas Soome int open(const char *, int, ...); 317199767f8SToomas Soome int creat(const char *, mode_t); 318199767f8SToomas Soome int fcntl(int, int, ...); 319199767f8SToomas Soome #if __BSD_VISIBLE 320199767f8SToomas Soome int flock(int, int); 321199767f8SToomas Soome #endif 322199767f8SToomas Soome #if __POSIX_VISIBLE >= 200809 323199767f8SToomas Soome int openat(int, const char *, int, ...); 324199767f8SToomas Soome #endif 325199767f8SToomas Soome #if __POSIX_VISIBLE >= 200112 326199767f8SToomas Soome int posix_fadvise(int, off_t, off_t, int); 327199767f8SToomas Soome int posix_fallocate(int, off_t, off_t); 328199767f8SToomas Soome #endif 329199767f8SToomas Soome __END_DECLS 330199767f8SToomas Soome #endif 331199767f8SToomas Soome 332199767f8SToomas Soome #endif /* !_SYS_FCNTL_H_ */ 333