Home | History | Annotate | Download | only in sys
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License, Version 1.0 only
      6  * (the "License").  You may not use this file except in compliance
      7  * with the License.
      8  *
      9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  * or http://www.opensolaris.org/os/licensing.
     11  * See the License for the specific language governing permissions
     12  * and limitations under the License.
     13  *
     14  * When distributing Covered Code, include this CDDL HEADER in each
     15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  * If applicable, add the following below this CDDL HEADER, with the
     17  * fields enclosed by brackets "[]" replaced with your own identifying
     18  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  *
     20  * CDDL HEADER END
     21  */
     22 /*
     23  * Copyright 1998 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
     28 /*	  All Rights Reserved  	*/
     29 
     30 /*
     31  * University Copyright- Copyright (c) 1982, 1986, 1988
     32  * The Regents of the University of California
     33  * All Rights Reserved
     34  *
     35  * University Acknowledgment- Portions of this document are derived from
     36  * software developed by the University of California, Berkeley, and its
     37  * contributors.
     38  */
     39 
     40 #ifndef _SYS_FCNTL_H
     41 #define	_SYS_FCNTL_H
     42 
     43 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     44 
     45 #ifndef _SYS_TYPES_H
     46 #include <sys/types.h>
     47 #endif
     48 
     49 #ifdef __cplusplus
     50 extern "C" {
     51 #endif
     52 
     53 /* Flag values accessible to open(2) and fcntl(2) */
     54 /*  (The first three can only be set by open) */
     55 #define	O_RDONLY 0
     56 #define	O_WRONLY 1
     57 #define	O_RDWR	 2
     58 #define	O_NDELAY 04	/* Non-blocking I/O */
     59 #define	O_APPEND 010	/* append (writes guaranteed at the end) */
     60 #define	O_SYNC	 020	/* synchronous write option */
     61 #define	O_NONBLOCK 0200 /* Non-blocking I/O (POSIX) */
     62 #define	O_PRIV 010000   /* Private access to file */
     63 
     64 #ifdef	_LARGEFILE_SOURCE
     65 #define	O_LARGEFILE	0x2000
     66 #endif
     67 
     68 /* Flag values accessible only to open(2) */
     69 #define	O_CREAT	00400	/* open with file create (uses third open arg) */
     70 #define	O_TRUNC	01000	/* open with truncation */
     71 #define	O_EXCL	02000	/* exclusive open */
     72 #define	O_NOCTTY 04000	/* don't allocate controlling tty (POSIX) */
     73 
     74 /* fcntl(2) requests */
     75 #define	F_DUPFD		0	/* Duplicate fildes */
     76 #define	F_GETFD		1	/* Get fildes flags */
     77 #define	F_SETFD		2	/* Set fildes flags */
     78 #define	F_GETFL		3	/* Get file flags */
     79 #define	F_SETFL		4	/* Set file flags */
     80 #define	F_SETLK		6	/* Set file lock */
     81 #define	F_SETLKW	7	/* Set file lock and wait */
     82 
     83 /*
     84  * Applications that read /dev/mem must be built like the kernel. A new
     85  * symbol "_KMEMUSER" is defined for this purpose.
     86  * Applications that read /dev/mem will migrate with the kernel
     87  * to an "_LTYPES" definition.
     88  */
     89 
     90 #if defined(_KERNEL) || defined(_KMEMUSER)
     91 #define	F_GETLK		14	/* Get file lock */
     92 #define	F_O_GETLK	5	/* SVR3 Get file lock */
     93 
     94 #else	/* user definition */
     95 
     96 #if defined(_LTYPES)	/* EFT definition */
     97 #define	F_GETLK		14	/* Get file lock */
     98 #else
     99 #define	F_GETLK		5	/* Get file lock */
    100 #endif	/* defined(_LTYPES) */
    101 
    102 #endif	/* defined(_KERNEL) */
    103 
    104 #define	F_SETLK		6	/* Set file lock */
    105 #define	F_SETLKW	7	/* Set file lock and wait */
    106 
    107 
    108 #define	F_CHKFL		8	/* Reserved */
    109 #define	F_ALLOCSP	10	/* Reserved */
    110 #define	F_FREESP	11	/* Free file space */
    111 #define	F_ISSTREAM	13	/* Is the file desc. a stream ? */
    112 #define	F_PRIV		15	/* Turn on private access to file */
    113 #define	F_NPRIV		16	/* Turn off private access to file */
    114 #define	F_QUOTACTL	17	/* UFS quota call */
    115 #define	F_BLOCKS	18	/* Get number of BLKSIZE blocks allocated */
    116 #define	F_BLKSIZE	19	/* Get optimal I/O block size */
    117 
    118 #define	F_GETOWN	23	/* Get owner */
    119 #define	F_SETOWN	24	/* Set owner */
    120 
    121 /* flags for F_GETFL, F_SETFL-- copied from <sys/file.h> */
    122 #ifndef FOPEN
    123 #define	FOPEN		0xFFFFFFFF
    124 #define	FREAD		0x01
    125 #define	FWRITE		0x02
    126 #define	FNDELAY		0x04
    127 #define	FAPPEND		0x08
    128 #define	FSYNC		0x10
    129 #define	FNONBLOCK	0x80
    130 
    131 #define	FMASK		0xFF    /* should be disjoint from FASYNC */
    132 
    133 /* open-only modes */
    134 
    135 #define	FCREAT		0x0100
    136 #define	FTRUNC		0x0200
    137 #define	FEXCL		0x0400
    138 #define	FNOCTTY		0x0800
    139 #define	FASYNC		0x1000
    140 
    141 /* file descriptor flags */
    142 #define	FCLOSEXEC	001	/* close on exec */
    143 #endif
    144 
    145 /*
    146  * File segment locking set data type - information passed to system by user.
    147  */
    148 #if defined(_KERNEL) || defined(_KMEMUSER)
    149 	/* EFT definition */
    150 typedef struct flock {
    151 	short	l_type;
    152 	short	l_whence;
    153 	off_t	l_start;
    154 	off_t	l_len;		/* len == 0 means until end of file */
    155 	int	l_sysid;
    156 	pid_t	l_pid;
    157 	long	pad[4];		/* reserve area */
    158 } flock_t;
    159 
    160 typedef struct o_flock {
    161 	short	l_type;
    162 	short	l_whence;
    163 	int	l_start;
    164 	int	l_len;		/* len == 0 means until end of file */
    165 	short   l_sysid;
    166 	o_pid_t l_pid;
    167 } o_flock_t;
    168 
    169 #else		/* user level definition */
    170 
    171 #if defined(_STYPES)
    172 	/* SVR3 definition */
    173 typedef struct flock {
    174 	short	l_type;
    175 	short	l_whence;
    176 	off_t	l_start;
    177 	off_t	l_len;		/* len == 0 means until end of file */
    178 	short	l_sysid;
    179 	o-pid_t	l_pid;
    180 } flock_t;
    181 
    182 #else
    183 
    184 typedef struct flock {
    185 	short	l_type;
    186 	short	l_whence;
    187 	off_t	l_start;
    188 	off_t	l_len;		/* len == 0 means until end of file */
    189 	int	l_sysid;
    190 	pid_t	l_pid;
    191 	long 	pad[4];		/* reserve area */
    192 } flock_t;
    193 
    194 #endif	/* define(_STYPES) */
    195 
    196 #endif	/* defined(_KERNEL) */
    197 
    198 /*
    199  * File segment locking types.
    200  */
    201 #define	F_RDLCK	01	/* Read lock */
    202 #define	F_WRLCK	02	/* Write lock */
    203 #define	F_UNLCK	03	/* Remove lock(s) */
    204 
    205 /*
    206  * POSIX constants
    207  */
    208 
    209 #define	O_ACCMODE	3	/* Mask for file access modes */
    210 #define	FD_CLOEXEC	1	/* close on exec flag */
    211 
    212 /* large file compilation environment setup */
    213 #if !defined(_LP64) && _FILE_OFFSET_BITS == 64
    214 #ifdef __PRAGMA_REDEFINE_EXTNAME
    215 #pragma	redefine_extname	open	open64
    216 #pragma	redefine_extname	creat	creat64
    217 #else
    218 #define	open			open64
    219 #define	creat			creat64
    220 #endif
    221 #endif  /* !_LP64 && _FILE_OFFSET_BITS == 64 */
    222 
    223 #if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
    224 #ifdef __PRAGMA_REDEFINE_EXTNAME
    225 #pragma	redefine_extname	open64	open
    226 #pragma	redefine_extname	creat64	creat
    227 #else
    228 #define	open64			open
    229 #define	creat64			creat
    230 #endif
    231 #endif  /* _LP64 && _LARGEFILE64_SOURCE */
    232 
    233 #if defined(__STDC__)
    234 extern int fcntl(int, int, ...);
    235 extern int open(const char *, int, ...);
    236 extern int creat(const char *, mode_t);
    237 #if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
    238 	!defined(__PRAGMA_REDEFINE_EXTNAME))
    239 extern int open64(const char *, int, ...);
    240 extern int creat64(const char *, mode_t);
    241 #endif
    242 
    243 #endif
    244 
    245 #ifdef __cplusplus
    246 }
    247 #endif
    248 
    249 #endif	/* _SYS_FCNTL_H */
    250