[BACK]Return to fcntl.h CVS log [TXT][DIR] Up to [local] / sys / sys

Annotation of sys/sys/fcntl.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: fcntl.h,v 1.10 2005/12/13 00:35:23 millert Exp $      */
                      2: /*     $NetBSD: fcntl.h,v 1.8 1995/03/26 20:24:12 jtc Exp $    */
                      3:
                      4: /*-
                      5:  * Copyright (c) 1983, 1990, 1993
                      6:  *     The Regents of the University of California.  All rights reserved.
                      7:  * (c) UNIX System Laboratories, Inc.
                      8:  * All or some portions of this file are derived from material licensed
                      9:  * to the University of California by American Telephone and Telegraph
                     10:  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
                     11:  * the permission of UNIX System Laboratories, Inc.
                     12:  *
                     13:  * Redistribution and use in source and binary forms, with or without
                     14:  * modification, are permitted provided that the following conditions
                     15:  * are met:
                     16:  * 1. Redistributions of source code must retain the above copyright
                     17:  *    notice, this list of conditions and the following disclaimer.
                     18:  * 2. Redistributions in binary form must reproduce the above copyright
                     19:  *    notice, this list of conditions and the following disclaimer in the
                     20:  *    documentation and/or other materials provided with the distribution.
                     21:  * 3. Neither the name of the University nor the names of its contributors
                     22:  *    may be used to endorse or promote products derived from this software
                     23:  *    without specific prior written permission.
                     24:  *
                     25:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     26:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     27:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     28:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     29:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     30:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     31:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     32:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     33:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     34:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     35:  * SUCH DAMAGE.
                     36:  *
                     37:  *     @(#)fcntl.h     8.3 (Berkeley) 1/21/94
                     38:  */
                     39:
                     40: #ifndef _SYS_FCNTL_H_
                     41: #define        _SYS_FCNTL_H_
                     42:
                     43: /*
                     44:  * This file includes the definitions for open and fcntl
                     45:  * described by POSIX for <fcntl.h>; it also includes
                     46:  * related kernel definitions.
                     47:  */
                     48:
                     49: #include <sys/cdefs.h>
                     50: #ifndef _KERNEL
                     51: #include <sys/types.h>
                     52: #endif
                     53:
                     54: /*
                     55:  * File status flags: these are used by open(2), fcntl(2).
                     56:  * They are also used (indirectly) in the kernel file structure f_flags,
                     57:  * which is a superset of the open/fcntl flags.  Open flags and f_flags
                     58:  * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
                     59:  * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
                     60:  */
                     61: /* open-only flags */
                     62: #define        O_RDONLY        0x0000          /* open for reading only */
                     63: #define        O_WRONLY        0x0001          /* open for writing only */
                     64: #define        O_RDWR          0x0002          /* open for reading and writing */
                     65: #define        O_ACCMODE       0x0003          /* mask for above modes */
                     66:
                     67: /*
                     68:  * Kernel encoding of open mode; separate read and write bits that are
                     69:  * independently testable: 1 greater than the above.
                     70:  *
                     71:  * XXX
                     72:  * FREAD and FWRITE are excluded from the #ifdef _KERNEL so that TIOCFLUSH,
                     73:  * which was documented to use FREAD/FWRITE, continues to work.
                     74:  */
                     75: #if __BSD_VISIBLE
                     76: #define        FREAD           0x0001
                     77: #define        FWRITE          0x0002
                     78: #endif
                     79: #define        O_NONBLOCK      0x0004          /* no delay */
                     80: #define        O_APPEND        0x0008          /* set append mode */
                     81: #if __BSD_VISIBLE
                     82: #define        O_SHLOCK        0x0010          /* open with shared file lock */
                     83: #define        O_EXLOCK        0x0020          /* open with exclusive file lock */
                     84: #define        O_ASYNC         0x0040          /* signal pgrp when data ready */
                     85: #define        O_FSYNC         0x0080          /* backwards compatibility */
                     86: #define        O_NOFOLLOW      0x0100          /* if path is a symlink, don't follow */
                     87: #endif
                     88: #if __POSIX_VISIBLE >= 199309 || __XPG_VISIBLE >= 420
                     89: #define        O_SYNC          0x0080          /* synchronous writes */
                     90: #endif
                     91: #define        O_CREAT         0x0200          /* create if nonexistant */
                     92: #define        O_TRUNC         0x0400          /* truncate to zero length */
                     93: #define        O_EXCL          0x0800          /* error if already exists */
                     94: #ifdef _KERNEL
                     95: #define        FMARK           0x1000          /* mark during gc() */
                     96: #define        FDEFER          0x2000          /* defer for next gc pass */
                     97: #define        FHASLOCK        0x4000          /* descriptor holds advisory lock */
                     98: #endif
                     99:
                    100: /*
                    101:  * POSIX 1003.1 specifies a higher granularity for synchronous operations
                    102:  * than we support.  Since synchronicity is all or nothing in OpenBSD
                    103:  * we just define these to be the same as O_SYNC.
                    104:  */
                    105: #define        O_DSYNC         O_SYNC          /* synchronous data writes */
                    106: #define        O_RSYNC         O_SYNC          /* synchronous reads */
                    107:
                    108: /* defined by POSIX 1003.1; BSD default, this bit is not required */
                    109: #define        O_NOCTTY        0x8000          /* don't assign controlling terminal */
                    110:
                    111: #ifdef _KERNEL
                    112: /*
                    113:  * convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE.
                    114:  * For out-of-range values for the flags, be slightly careful (but lossy).
                    115:  */
                    116: #define        FFLAGS(oflags)  (((oflags) & ~O_ACCMODE) | (((oflags) + 1) & O_ACCMODE))
                    117: #define        OFLAGS(fflags)  (((fflags) & ~O_ACCMODE) | (((fflags) - 1) & O_ACCMODE))
                    118:
                    119: /* bits to save after open */
                    120: #define        FMASK           (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
                    121: /* bits settable by fcntl(F_SETFL, ...) */
                    122: #define        FCNTLFLAGS      (FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
                    123: #endif
                    124:
                    125: /*
                    126:  * The O_* flags used to have only F* names, which were used in the kernel
                    127:  * and by fcntl.  We retain the F* names for the kernel f_flags field
                    128:  * and for backward compatibility for fcntl.
                    129:  */
                    130: #if __BSD_VISIBLE
                    131: #define        FAPPEND         O_APPEND        /* kernel/compat */
                    132: #define        FASYNC          O_ASYNC         /* kernel/compat */
                    133: #define        FFSYNC          O_SYNC          /* kernel */
                    134: #define        FNONBLOCK       O_NONBLOCK      /* kernel */
                    135: #define        FNDELAY         O_NONBLOCK      /* compat */
                    136: #define        O_NDELAY        O_NONBLOCK      /* compat */
                    137: #endif
                    138:
                    139: /*
                    140:  * Constants used for fcntl(2)
                    141:  */
                    142:
                    143: /* command values */
                    144: #define        F_DUPFD         0               /* duplicate file descriptor */
                    145: #define        F_GETFD         1               /* get file descriptor flags */
                    146: #define        F_SETFD         2               /* set file descriptor flags */
                    147: #define        F_GETFL         3               /* get file status flags */
                    148: #define        F_SETFL         4               /* set file status flags */
                    149: #if __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE >= 500
                    150: #define        F_GETOWN        5               /* get SIGIO/SIGURG proc/pgrp */
                    151: #define F_SETOWN       6               /* set SIGIO/SIGURG proc/pgrp */
                    152: #endif
                    153: #define        F_GETLK         7               /* get record locking information */
                    154: #define        F_SETLK         8               /* set record locking information */
                    155: #define        F_SETLKW        9               /* F_SETLK; wait if blocked */
                    156:
                    157: /* file descriptor flags (F_GETFD, F_SETFD) */
                    158: #define        FD_CLOEXEC      1               /* close-on-exec flag */
                    159:
                    160: /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
                    161: #define        F_RDLCK         1               /* shared or read lock */
                    162: #define        F_UNLCK         2               /* unlock */
                    163: #define        F_WRLCK         3               /* exclusive or write lock */
                    164: #ifdef _KERNEL
                    165: #define        F_WAIT          0x010           /* Wait until lock is granted */
                    166: #define        F_FLOCK         0x020           /* Use flock(2) semantics for lock */
                    167: #define        F_POSIX         0x040           /* Use POSIX semantics for lock */
                    168: #endif
                    169:
                    170: /*
                    171:  * Advisory file segment locking data type -
                    172:  * information passed to system by user
                    173:  */
                    174: struct flock {
                    175:        off_t   l_start;        /* starting offset */
                    176:        off_t   l_len;          /* len = 0 means until end of file */
                    177:        pid_t   l_pid;          /* lock owner */
                    178:        short   l_type;         /* lock type: read/write, etc. */
                    179:        short   l_whence;       /* type of l_start */
                    180: };
                    181:
                    182:
                    183: #if __BSD_VISIBLE
                    184: /* lock operations for flock(2) */
                    185: #define        LOCK_SH         0x01            /* shared file lock */
                    186: #define        LOCK_EX         0x02            /* exclusive file lock */
                    187: #define        LOCK_NB         0x04            /* don't block when locking */
                    188: #define        LOCK_UN         0x08            /* unlock file */
                    189: #endif
                    190:
                    191:
                    192: #ifndef _KERNEL
                    193: __BEGIN_DECLS
                    194: int    open(const char *, int, ...);
                    195: int    creat(const char *, mode_t);
                    196: int    fcntl(int, int, ...);
                    197: #if __BSD_VISIBLE
                    198: int    flock(int, int);
                    199: #endif
                    200: __END_DECLS
                    201: #endif
                    202:
                    203: #endif /* !_SYS_FCNTL_H_ */

CVSweb