home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / sys / fcntl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  10.9 KB  |  297 lines

  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.  
  63.  
  64. #ifndef _SYS_FCNTL_H_
  65. #define    _SYS_FCNTL_H_
  66.  
  67. /*
  68.  * This file includes the definitions for open and fcntl
  69.  * described by POSIX for <fcntl.h>; it also includes
  70.  * related kernel definitions.
  71.  */
  72.  
  73. #ifndef KERNEL
  74. #include <sys/types.h>
  75. #endif
  76.  
  77. /*
  78.  * File status flags: these are used by open(2), fcntl(2).
  79.  * They are also used (indirectly) in the kernel file structure f_flags,
  80.  * which is a superset of the open/fcntl flags.  Open flags and f_flags
  81.  * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
  82.  * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
  83.  */
  84. /* open-only flags */
  85. #define    O_RDONLY    0x0000        /* open for reading only */
  86. #define    O_WRONLY    0x0001        /* open for writing only */
  87. #define    O_RDWR        0x0002        /* open for reading and writing */
  88. #define    O_ACCMODE    0x0003        /* mask for above modes */
  89.  
  90. /*
  91.  * Kernel encoding of open mode; separate read and write bits that are
  92.  * independently testable: 1 greater than the above.
  93.  *
  94.  * XXX
  95.  * FREAD and FWRITE are excluded from the #ifdef KERNEL so that TIOCFLUSH,
  96.  * which was documented to use FREAD/FWRITE, continues to work.
  97.  */
  98. #ifndef _POSIX_SOURCE
  99. #define    FREAD        0x0001
  100. #define    FWRITE        0x0002
  101. #endif
  102. #define    O_NONBLOCK    0x0004        /* no delay */
  103. #define    O_APPEND    0x0008        /* set append mode */
  104. #ifndef _POSIX_SOURCE
  105. #define    O_SHLOCK    0x0010        /* open with shared file lock */
  106. #define    O_EXLOCK    0x0020        /* open with exclusive file lock */
  107. #define    O_ASYNC        0x0040        /* signal pgrp when data ready */
  108. #define    O_FSYNC        0x0080        /* synchronous writes */
  109. #endif
  110. #define    O_CREAT        0x0200        /* create if nonexistant */
  111. #define    O_TRUNC        0x0400        /* truncate to zero length */
  112. #define    O_EXCL        0x0800        /* error if already exists */
  113. #ifdef KERNEL
  114. #define    FMARK        0x1000        /* mark during gc() */
  115. #define    FDEFER        0x2000        /* defer for next gc pass */
  116. #define    FHASLOCK    0x4000        /* descriptor holds advisory lock */
  117. #endif
  118.  
  119. /* defined by POSIX 1003.1; BSD default, so no bit required */
  120. #define    O_NOCTTY    0        /* don't assign controlling terminal */
  121.  
  122. #ifdef KERNEL
  123. /* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
  124. #define    FFLAGS(oflags)    ((oflags) + 1)
  125. #define    OFLAGS(fflags)    ((fflags) - 1)
  126.  
  127. /* bits to save after open */
  128. #define    FMASK        (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  129. /* bits settable by fcntl(F_SETFL, ...) */
  130. #define    FCNTLFLAGS    (FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  131. #endif
  132.  
  133. /*
  134.  * The O_* flags used to have only F* names, which were used in the kernel
  135.  * and by fcntl.  We retain the F* names for the kernel f_flags field
  136.  * and for backward compatibility for fcntl.
  137.  */
  138. #ifndef _POSIX_SOURCE
  139. #define    FAPPEND        O_APPEND    /* kernel/compat */
  140. #define    FASYNC        O_ASYNC        /* kernel/compat */
  141. #define    FFSYNC        O_FSYNC        /* kernel */
  142. #define    FNONBLOCK    O_NONBLOCK    /* kernel */
  143. #define    FNDELAY        O_NONBLOCK    /* compat */
  144. #define    O_NDELAY    O_NONBLOCK    /* compat */
  145. #endif
  146.  
  147. /*
  148.  * Flags used for copyfile(2)
  149.  */
  150.  
  151. #ifndef _POSIX_SOURCE
  152. #define CPF_OVERWRITE 1
  153. #define CPF_IGNORE_MODE 2
  154. #define CPF_MASK (CPF_OVERWRITE|CPF_IGNORE_MODE)
  155. #endif
  156.  
  157. /*
  158.  * Constants used for fcntl(2)
  159.  */
  160.  
  161. /* command values */
  162. #define    F_DUPFD        0        /* duplicate file descriptor */
  163. #define    F_GETFD        1        /* get file descriptor flags */
  164. #define    F_SETFD        2        /* set file descriptor flags */
  165. #define    F_GETFL        3        /* get file status flags */
  166. #define    F_SETFL        4        /* set file status flags */
  167. #ifndef _POSIX_SOURCE
  168. #define    F_GETOWN    5        /* get SIGIO/SIGURG proc/pgrp */
  169. #define F_SETOWN    6        /* set SIGIO/SIGURG proc/pgrp */
  170. #endif
  171. #define    F_GETLK        7        /* get record locking information */
  172. #define    F_SETLK        8        /* set record locking information */
  173. #define    F_SETLKW    9        /* F_SETLK; wait if blocked */
  174. #define F_PREALLOCATE   42        /* Preallocate storage */
  175. #define F_SETSIZE       43        /* Truncate a file without zeroing space */    
  176. #define F_RDADVISE      44              /* Issue an advisory read async with no copy to user */
  177. #define F_RDAHEAD       45              /* turn read ahead off/on */
  178. #define F_READBOOTSTRAP 46              /* Read bootstrap from disk */
  179. #define F_WRITEBOOTSTRAP 47             /* Write bootstrap on disk */
  180. #define F_NOCACHE       48              /* turning data caching off/on */
  181. #define F_LOG2PHYS    49        /* file offset to device offset */
  182.  
  183. /* file descriptor flags (F_GETFD, F_SETFD) */
  184. #define    FD_CLOEXEC    1        /* close-on-exec flag */
  185.  
  186. /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
  187. #define    F_RDLCK        1        /* shared or read lock */
  188. #define    F_UNLCK        2        /* unlock */
  189. #define    F_WRLCK        3        /* exclusive or write lock */
  190. #ifdef KERNEL
  191. #define    F_WAIT        0x010        /* Wait until lock is granted */
  192. #define    F_FLOCK        0x020         /* Use flock(2) semantics for lock */
  193. #define    F_POSIX        0x040         /* Use POSIX semantics for lock */
  194. #endif
  195.  
  196. /* allocate flags (F_PREALLOCATE) */
  197.  
  198. #define F_ALLOCATECONTIG  0x00000002    /* allocate contigious space */
  199. #define F_ALLOCATEALL     0x00000004    /* allocate all requested space or no space at all */
  200.  
  201. /* Position Modes (fst_posmode) for F_PREALLOCATE */
  202.  
  203. #define F_PEOFPOSMODE 3            /* Make it past all of the SEEK pos modes so that */
  204.                     /* we can keep them in sync should we desire */    
  205. #define F_VOLPOSMODE    4        /* specify volume starting postion */
  206.  
  207. /*
  208.  * Advisory file segment locking data type -
  209.  * information passed to system by user
  210.  */
  211. struct flock {
  212.     off_t    l_start;    /* starting offset */
  213.     off_t    l_len;        /* len = 0 means until end of file */
  214.     pid_t    l_pid;        /* lock owner */
  215.     short    l_type;        /* lock type: read/write, etc. */
  216.     short    l_whence;    /* type of l_start */
  217. };
  218.  
  219.  
  220. /*
  221.  * advisory file read data type -
  222.  * information passed by user to system
  223.  */
  224. struct radvisory {
  225.        off_t   ra_offset;
  226.        int     ra_count;
  227. };
  228.  
  229.  
  230. #ifndef _POSIX_SOURCE
  231. /* lock operations for flock(2) */
  232. #define    LOCK_SH        0x01        /* shared file lock */
  233. #define    LOCK_EX        0x02        /* exclusive file lock */
  234. #define    LOCK_NB        0x04        /* don't block when locking */
  235. #define    LOCK_UN        0x08        /* unlock file */
  236. #endif
  237.  
  238. /*  fstore_t type used by F_DEALLOCATE and F_PREALLOCATE commands */
  239.  
  240. typedef struct fstore {
  241.     u_int32_t fst_flags;    /* IN: flags word */
  242.     int     fst_posmode;    /* IN: indicates use of offset field */
  243.     off_t    fst_offset;    /* IN: start of the region */
  244.     off_t    fst_length;    /* IN: size of the region */
  245.     off_t   fst_bytesalloc;    /* OUT: number of bytes allocated */
  246. } fstore_t;
  247.  
  248. /* fbootstraptransfer_t used by F_READBOOTSTRAP and F_WRITEBOOTSTRAP commands */
  249.  
  250. typedef struct fbootstraptransfer {
  251.   off_t fbt_offset;             /* IN: offset to start read/write */
  252.   size_t fbt_length;            /* IN: number of bytes to transfer */
  253.   void *fbt_buffer;             /* IN: buffer to be read/written */
  254. } fbootstraptransfer_t;
  255.  
  256. /*
  257.  * For F_LOG2PHYS this information is passed back to user
  258.  * Currently only devoffset is returned - that is the VOP_BMAP
  259.  * result - the disk device address corresponding to the
  260.  * current file offset (likely set with an lseek).
  261.  *
  262.  * The flags could hold an indication of whether the # of 
  263.  * contiguous bytes reflects the true extent length on disk,
  264.  * or is an advisory value that indicates there is at least that
  265.  * many bytes contiguous.  For some filesystems it might be too
  266.  * inefficient to provide anything beyond the advisory value.
  267.  * Flags and contiguous bytes return values are not yet implemented.
  268.  * For them the fcntl will nedd to switch from using BMAP to CMAP
  269.  * and a per filesystem type flag will be needed to interpret the
  270.  * contiguous bytes count result from CMAP.
  271.  */
  272. struct log2phys {
  273.     u_int32_t    l2p_flags;        /* unused so far */
  274.     off_t        l2p_contigbytes;    /* unused so far */
  275.     off_t        l2p_devoffset;    /* bytes into device */
  276. };
  277.  
  278. #ifndef _POSIX_SOURCE
  279. #define    O_POPUP       0x80000000   /* force window to popup on open */
  280. #define    O_ALERT       0x20000000    /* small, clean popup window */
  281. #endif
  282.  
  283. #ifndef KERNEL
  284. #include <sys/cdefs.h>
  285.  
  286. __BEGIN_DECLS
  287. int    open __P((const char *, int, ...));
  288. int    creat __P((const char *, mode_t));
  289. int    fcntl __P((int, int, ...));
  290. #ifndef _POSIX_SOURCE
  291. int    flock __P((int, int));
  292. #endif /* !_POSIX_SOURCE */
  293. __END_DECLS
  294. #endif
  295.  
  296. #endif /* !_SYS_FCNTL_H_ */
  297.