root/sys/fcntl.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    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_ */

/* [<][>][^][v][top][bottom][index][help] */