Annotation of kernel/bsd/sys/fcntl.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.1 (the "License").  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License.
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: 
                     25: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
                     26: /*-
                     27:  * Copyright (c) 1983, 1990, 1993
                     28:  *     The Regents of the University of California.  All rights reserved.
                     29:  * (c) UNIX System Laboratories, Inc.
                     30:  * All or some portions of this file are derived from material licensed
                     31:  * to the University of California by American Telephone and Telegraph
                     32:  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
                     33:  * the permission of UNIX System Laboratories, Inc.
                     34:  *
                     35:  * Redistribution and use in source and binary forms, with or without
                     36:  * modification, are permitted provided that the following conditions
                     37:  * are met:
                     38:  * 1. Redistributions of source code must retain the above copyright
                     39:  *    notice, this list of conditions and the following disclaimer.
                     40:  * 2. Redistributions in binary form must reproduce the above copyright
                     41:  *    notice, this list of conditions and the following disclaimer in the
                     42:  *    documentation and/or other materials provided with the distribution.
                     43:  * 3. All advertising materials mentioning features or use of this software
                     44:  *    must display the following acknowledgement:
                     45:  *     This product includes software developed by the University of
                     46:  *     California, Berkeley and its contributors.
                     47:  * 4. Neither the name of the University nor the names of its contributors
                     48:  *    may be used to endorse or promote products derived from this software
                     49:  *    without specific prior written permission.
                     50:  *
                     51:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     52:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     53:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     54:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     55:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     56:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     57:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     58:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     59:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     60:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     61:  * SUCH DAMAGE.
                     62:  *
                     63:  *     @(#)fcntl.h     8.3 (Berkeley) 1/21/94
                     64:  */
                     65: 
                     66: #ifndef _SYS_FCNTL_H_
                     67: #define        _SYS_FCNTL_H_
                     68: 
                     69: /*
                     70:  * This file includes the definitions for open and fcntl
                     71:  * described by POSIX for <fcntl.h>; it also includes
                     72:  * related kernel definitions.
                     73:  */
                     74: 
                     75: #ifndef _KERNEL
                     76: #include <sys/types.h>
                     77: #endif
                     78: 
                     79: /*
                     80:  * File status flags: these are used by open(2), fcntl(2).
                     81:  * They are also used (indirectly) in the kernel file structure f_flags,
                     82:  * which is a superset of the open/fcntl flags.  Open flags and f_flags
                     83:  * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
                     84:  * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
                     85:  */
                     86: /* open-only flags */
                     87: #define        O_RDONLY        0x0000          /* open for reading only */
                     88: #define        O_WRONLY        0x0001          /* open for writing only */
                     89: #define        O_RDWR          0x0002          /* open for reading and writing */
                     90: #define        O_ACCMODE       0x0003          /* mask for above modes */
                     91: 
                     92: /*
                     93:  * Kernel encoding of open mode; separate read and write bits that are
                     94:  * independently testable: 1 greater than the above.
                     95:  *
                     96:  * XXX
                     97:  * FREAD and FWRITE are excluded from the #ifdef _KERNEL so that TIOCFLUSH,
                     98:  * which was documented to use FREAD/FWRITE, continues to work.
                     99:  */
                    100: #ifndef _POSIX_SOURCE
                    101: #define        FREAD           0x0001
                    102: #define        FWRITE          0x0002
                    103: #endif
                    104: #define        O_NONBLOCK      0x0004          /* no delay */
                    105: #define        O_APPEND        0x0008          /* set append mode */
                    106: #ifndef _POSIX_SOURCE
                    107: #define        O_SHLOCK        0x0010          /* open with shared file lock */
                    108: #define        O_EXLOCK        0x0020          /* open with exclusive file lock */
                    109: #define        O_ASYNC         0x0040          /* signal pgrp when data ready */
                    110: #define        O_FSYNC         0x0080          /* synchronous writes */
                    111: #endif
                    112: #define        O_CREAT         0x0200          /* create if nonexistant */
                    113: #define        O_TRUNC         0x0400          /* truncate to zero length */
                    114: #define        O_EXCL          0x0800          /* error if already exists */
                    115: #ifdef _KERNEL
                    116: #define        FMARK           0x1000          /* mark during gc() */
                    117: #define        FDEFER          0x2000          /* defer for next gc pass */
                    118: #define        FHASLOCK        0x4000          /* descriptor holds advisory lock */
                    119: #endif
                    120: 
                    121: /* defined by POSIX 1003.1; BSD default, so no bit required */
                    122: #define        O_NOCTTY        0               /* don't assign controlling terminal */
                    123: 
                    124: #ifdef _KERNEL
                    125: /* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
                    126: #define        FFLAGS(oflags)  ((oflags) + 1)
                    127: #define        OFLAGS(fflags)  ((fflags) - 1)
                    128: 
                    129: /* bits to save after open */
                    130: #define        FMASK           (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
                    131: /* bits settable by fcntl(F_SETFL, ...) */
                    132: #define        FCNTLFLAGS      (FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
                    133: #endif
                    134: 
                    135: /*
                    136:  * The O_* flags used to have only F* names, which were used in the kernel
                    137:  * and by fcntl.  We retain the F* names for the kernel f_flags field
                    138:  * and for backward compatibility for fcntl.
                    139:  */
                    140: #ifndef _POSIX_SOURCE
                    141: #define        FAPPEND         O_APPEND        /* kernel/compat */
                    142: #define        FASYNC          O_ASYNC         /* kernel/compat */
                    143: #define        FFSYNC          O_FSYNC         /* kernel */
                    144: #define        FNONBLOCK       O_NONBLOCK      /* kernel */
                    145: #define        FNDELAY         O_NONBLOCK      /* compat */
                    146: #define        O_NDELAY        O_NONBLOCK      /* compat */
                    147: #endif
                    148: 
                    149: /*
                    150:  * Constants used for fcntl(2)
                    151:  */
                    152: 
                    153: /* command values */
                    154: #define        F_DUPFD         0               /* duplicate file descriptor */
                    155: #define        F_GETFD         1               /* get file descriptor flags */
                    156: #define        F_SETFD         2               /* set file descriptor flags */
                    157: #define        F_GETFL         3               /* get file status flags */
                    158: #define        F_SETFL         4               /* set file status flags */
                    159: #ifndef _POSIX_SOURCE
                    160: #define        F_GETOWN        5               /* get SIGIO/SIGURG proc/pgrp */
                    161: #define F_SETOWN       6               /* set SIGIO/SIGURG proc/pgrp */
                    162: #endif
                    163: #define        F_GETLK         7               /* get record locking information */
                    164: #define        F_SETLK         8               /* set record locking information */
                    165: #define        F_SETLKW        9               /* F_SETLK; wait if blocked */
                    166: #define F_PREALLOCATE   42             /* Preallocate storage */
                    167: #define F_SETSIZE       43             /* Truncate a file without zeroing space */     
                    168: #define F_RDADVISE      44              /* Issue an advisory read async with no copy to user */
                    169: #define F_RDAHEAD       45              /* turn read ahead off/on */
                    170: #define F_READBOOTSTRAP 46              /* Read bootstrap from disk */
                    171: #define F_WRITEBOOTSTRAP 47             /* Write bootstrap on disk */
                    172: 
                    173: /* file descriptor flags (F_GETFD, F_SETFD) */
                    174: #define        FD_CLOEXEC      1               /* close-on-exec flag */
                    175: 
                    176: /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
                    177: #define        F_RDLCK         1               /* shared or read lock */
                    178: #define        F_UNLCK         2               /* unlock */
                    179: #define        F_WRLCK         3               /* exclusive or write lock */
                    180: #ifdef _KERNEL
                    181: #define        F_WAIT          0x010           /* Wait until lock is granted */
                    182: #define        F_FLOCK         0x020           /* Use flock(2) semantics for lock */
                    183: #define        F_POSIX         0x040           /* Use POSIX semantics for lock */
                    184: #endif
                    185: 
                    186: /* allocate flags (F_PREALLOCATE) */
                    187: 
                    188: #define F_ALLOCATECONTIG  0x00000002    /* allocate contigious space */
                    189: #define F_ALLOCATEALL     0x00000004   /* allocate all requested space or no space at all */
                    190: 
                    191: /* Position Modes (fst_posmode) for F_PREALLOCATE */
                    192: 
                    193: #define F_PEOFPOSMODE 3                        /* Make it past all of the SEEK pos modes so that */
                    194:                                        /* we can keep them in sync should we desire */ 
                    195: 
                    196: /*
                    197:  * Advisory file segment locking data type -
                    198:  * information passed to system by user
                    199:  */
                    200: struct flock {
                    201:        off_t   l_start;        /* starting offset */
                    202:        off_t   l_len;          /* len = 0 means until end of file */
                    203:        pid_t   l_pid;          /* lock owner */
                    204:        short   l_type;         /* lock type: read/write, etc. */
                    205:        short   l_whence;       /* type of l_start */
                    206: };
                    207: 
                    208: 
                    209: /*
                    210:  * advisory file read data type -
                    211:  * information passed by user to system
                    212:  */
                    213: struct radvisory {
                    214:        off_t   ra_offset;
                    215:        int     ra_count;
                    216: };
                    217: 
                    218: 
                    219: #ifndef _POSIX_SOURCE
                    220: /* lock operations for flock(2) */
                    221: #define        LOCK_SH         0x01            /* shared file lock */
                    222: #define        LOCK_EX         0x02            /* exclusive file lock */
                    223: #define        LOCK_NB         0x04            /* don't block when locking */
                    224: #define        LOCK_UN         0x08            /* unlock file */
                    225: #endif
                    226: 
                    227: /*  fstore_t type used by F_DEALLCOATE and F_PREALLCOATE commands */
                    228: 
                    229: typedef struct fstore {
                    230:         u_int32_t fst_flags;   /* IN: flags word */
                    231:        int     fst_posmode;    /* IN: indicates use of offset field */
                    232:        off_t   fst_offset;     /* IN: start of the region */
                    233:        off_t   fst_length;     /* IN: size of the region */
                    234:        off_t   fst_bytesalloc; /* OUT: number of bytes allocated */
                    235: } fstore_t;
                    236: 
                    237: /* fbootstraptransfer_t used by F_READBOOTSTRAP and F_WRITEBOOTSTRAP commands */
                    238: 
                    239: typedef struct fbootstraptransfer {
                    240:   off_t fbt_offset;             /* IN: offset to start read/write */
                    241:   size_t fbt_length;            /* IN: number of bytes to transfer */
                    242:   void *fbt_buffer;             /* IN: buffer to be read/written */
                    243: } fbootstraptransfer_t;
                    244: 
                    245: #ifndef _POSIX_SOURCE
                    246: #define        O_POPUP    0x80000000   /* force window to */
                    247:                                                                /* popup on open */
                    248: #define        O_NO_MFS   0x40000000   /* don't use mapped */
                    249:                                                                /* files */
                    250: #define        O_ALERT    0x20000000   /* small, clean popup */
                    251:                                                                /* window */
                    252: #endif
                    253: 
                    254: #ifndef _KERNEL
                    255: #include <sys/cdefs.h>
                    256: 
                    257: __BEGIN_DECLS
                    258: int    open __P((const char *, int, ...));
                    259: int    creat __P((const char *, mode_t));
                    260: int    fcntl __P((int, int, ...));
                    261: #ifndef _POSIX_SOURCE
                    262: int    flock __P((int, int));
                    263: #endif /* !_POSIX_SOURCE */
                    264: __END_DECLS
                    265: #endif
                    266: 
                    267: #endif /* !_SYS_FCNTL_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.