The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/fcntl.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $OpenBSD: fcntl.h,v 1.22 2019/01/21 18:09:21 anton 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 nonexistent */
   92 #define O_TRUNC         0x0400          /* truncate to zero length */
   93 #define O_EXCL          0x0800          /* error if already exists */
   94 
   95 /*
   96  * POSIX 1003.1 specifies a higher granularity for synchronous operations
   97  * than we support.  Since synchronicity is all or nothing in OpenBSD
   98  * we just define these to be the same as O_SYNC.
   99  */
  100 #define O_DSYNC         O_SYNC          /* synchronous data writes */
  101 #define O_RSYNC         O_SYNC          /* synchronous reads */
  102 
  103 /* defined by POSIX 1003.1; BSD default, this bit is not required */
  104 #define O_NOCTTY        0x8000          /* don't assign controlling terminal */
  105 
  106 /* defined by POSIX Issue 7 */
  107 #define O_CLOEXEC       0x10000         /* atomically set FD_CLOEXEC */
  108 #define O_DIRECTORY     0x20000         /* fail if not a directory */
  109 
  110 #ifdef _KERNEL
  111 /*
  112  * convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE.
  113  * For out-of-range values for the flags, be slightly careful (but lossy).
  114  */
  115 #define FFLAGS(oflags)  (((oflags) & ~O_ACCMODE) | (((oflags) + 1) & O_ACCMODE))
  116 #define OFLAGS(fflags)  (((fflags) & ~O_ACCMODE) | (((fflags) - 1) & O_ACCMODE))
  117 
  118 /* bits to save after open */
  119 #define FMASK           (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  120 /* bits settable by fcntl(F_SETFL, ...) */
  121 #define FCNTLFLAGS      (FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  122 #endif
  123 
  124 /*
  125  * The O_* flags used to have only F* names, which were used in the kernel
  126  * and by fcntl.  We retain the F* names for the kernel f_flags field
  127  * and for backward compatibility for fcntl.
  128  */
  129 #if __BSD_VISIBLE
  130 #define FAPPEND         O_APPEND        /* kernel/compat */
  131 #define FASYNC          O_ASYNC         /* kernel/compat */
  132 #define FFSYNC          O_SYNC          /* kernel */
  133 #define FNONBLOCK       O_NONBLOCK      /* kernel */
  134 #define FNDELAY         O_NONBLOCK      /* compat */
  135 #define O_NDELAY        O_NONBLOCK      /* compat */
  136 #endif
  137 
  138 /*
  139  * Constants used for fcntl(2)
  140  */
  141 
  142 /* command values */
  143 #define F_DUPFD         0               /* duplicate file descriptor */
  144 #define F_GETFD         1               /* get file descriptor flags */
  145 #define F_SETFD         2               /* set file descriptor flags */
  146 #define F_GETFL         3               /* get file status flags */
  147 #define F_SETFL         4               /* set file status flags */
  148 #if __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE >= 500
  149 #define F_GETOWN        5               /* get SIGIO/SIGURG proc/pgrp */
  150 #define F_SETOWN        6               /* set SIGIO/SIGURG proc/pgrp */
  151 #endif
  152 #define F_GETLK         7               /* get record locking information */
  153 #define F_SETLK         8               /* set record locking information */
  154 #define F_SETLKW        9               /* F_SETLK; wait if blocked */
  155 #if __POSIX_VISIBLE >= 200809
  156 #define F_DUPFD_CLOEXEC 10              /* duplicate with FD_CLOEXEC set */
  157 #endif
  158 #if __BSD_VISIBLE
  159 #define F_ISATTY        11              /* used by isatty(3) */
  160 #endif
  161 
  162 /* file descriptor flags (F_GETFD, F_SETFD) */
  163 #define FD_CLOEXEC      1               /* close-on-exec flag */
  164 
  165 /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
  166 #define F_RDLCK         1               /* shared or read lock */
  167 #define F_UNLCK         2               /* unlock */
  168 #define F_WRLCK         3               /* exclusive or write lock */
  169 #ifdef _KERNEL
  170 #define F_WAIT          0x010           /* Wait until lock is granted */
  171 #define F_FLOCK         0x020           /* Use flock(2) semantics for lock */
  172 #define F_POSIX         0x040           /* Use POSIX semantics for lock */
  173 #define F_INTR          0x080           /* Lock operation interrupted */
  174 #endif
  175 
  176 /*
  177  * Advisory file segment locking data type -
  178  * information passed to system by user
  179  */
  180 struct flock {
  181         off_t   l_start;        /* starting offset */
  182         off_t   l_len;          /* len = 0 means until end of file */
  183         pid_t   l_pid;          /* lock owner */
  184         short   l_type;         /* lock type: read/write, etc. */
  185         short   l_whence;       /* type of l_start */
  186 };
  187 
  188 
  189 #if __BSD_VISIBLE
  190 /* lock operations for flock(2) */
  191 #define LOCK_SH         0x01            /* shared file lock */
  192 #define LOCK_EX         0x02            /* exclusive file lock */
  193 #define LOCK_NB         0x04            /* don't block when locking */
  194 #define LOCK_UN         0x08            /* unlock file */
  195 #endif
  196 
  197 #if __POSIX_VISIBLE >= 200809
  198 #define AT_FDCWD        -100
  199 
  200 #define AT_EACCESS              0x01
  201 #define AT_SYMLINK_NOFOLLOW     0x02
  202 #define AT_SYMLINK_FOLLOW       0x04
  203 #define AT_REMOVEDIR            0x08
  204 #endif
  205 
  206 #ifndef _KERNEL
  207 __BEGIN_DECLS
  208 int     open(const char *, int, ...);
  209 int     creat(const char *, mode_t);
  210 int     fcntl(int, int, ...);
  211 #if __BSD_VISIBLE
  212 int     flock(int, int);
  213 #endif
  214 #if __POSIX_VISIBLE >= 200809
  215 int     openat(int, const char *, int, ...);
  216 #endif
  217 __END_DECLS
  218 #endif
  219 
  220 #endif /* !_SYS_FCNTL_H_ */

Cache object: b0123907eefe6d68f9b57c2bf7fc8be4


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.