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

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