/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 1998 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * Copyright 2015 Joyent, Inc. All rights reserved. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ /* * University Copyright- Copyright (c) 1982, 1986, 1988 * The Regents of the University of California * All Rights Reserved * * University Acknowledgment- Portions of this document are derived from * software developed by the University of California, Berkeley, and its * contributors. */ #ifndef _SYS_FCNTL_H #define _SYS_FCNTL_H #ifndef _SYS_TYPES_H #include #endif #ifdef __cplusplus extern "C" { #endif /* Flag values accessible to open(2) and fcntl(2) */ /* (The first three can only be set by open) */ #define O_RDONLY 0 #define O_WRONLY 1 #define O_RDWR 2 #define O_NDELAY 04 /* Non-blocking I/O */ #define O_APPEND 010 /* append (writes guaranteed at the end) */ #define O_SYNC 020 /* synchronous write option */ #define O_NONBLOCK 0200 /* Non-blocking I/O (POSIX) */ #define O_PRIV 010000 /* Private access to file */ #ifdef _LARGEFILE_SOURCE #define O_LARGEFILE 0x2000 #endif /* Flag values accessible only to open(2) */ #define O_CREAT 00400 /* open with file create (uses third open arg) */ #define O_TRUNC 01000 /* open with truncation */ #define O_EXCL 02000 /* exclusive open */ #define O_NOCTTY 04000 /* don't allocate controlling tty (POSIX) */ /* fcntl(2) requests */ #define F_DUPFD 0 /* Duplicate fildes */ #define F_GETFD 1 /* Get fildes flags */ #define F_SETFD 2 /* Set fildes flags */ #define F_GETFL 3 /* Get file flags */ #define F_SETFL 4 /* Set file flags */ #define F_SETLK 6 /* Set file lock */ #define F_SETLKW 7 /* Set file lock and wait */ #define F_FLOCK 53 /* private - flock */ #define F_FLOCKW 54 /* private - flock wait */ /* * Applications that read /dev/mem must be built like the kernel. A new * symbol "_KMEMUSER" is defined for this purpose. * Applications that read /dev/mem will migrate with the kernel * to an "_LTYPES" definition. */ #if defined(_KERNEL) || defined(_KMEMUSER) #define F_GETLK 14 /* Get file lock */ #define F_O_GETLK 5 /* SVR3 Get file lock */ #else /* user definition */ #if defined(_LTYPES) /* EFT definition */ #define F_GETLK 14 /* Get file lock */ #else #define F_GETLK 5 /* Get file lock */ #endif /* defined(_LTYPES) */ #endif /* defined(_KERNEL) */ #define F_SETLK 6 /* Set file lock */ #define F_SETLKW 7 /* Set file lock and wait */ #define F_CHKFL 8 /* Reserved */ #define F_ALLOCSP 10 /* Reserved */ #define F_FREESP 11 /* Free file space */ #define F_ISSTREAM 13 /* Is the file desc. a stream ? */ #define F_PRIV 15 /* Turn on private access to file */ #define F_NPRIV 16 /* Turn off private access to file */ #define F_QUOTACTL 17 /* UFS quota call */ #define F_BLOCKS 18 /* Get number of BLKSIZE blocks allocated */ #define F_BLKSIZE 19 /* Get optimal I/O block size */ #define F_GETOWN 23 /* Get owner */ #define F_SETOWN 24 /* Set owner */ /* flags for F_GETFL, F_SETFL-- copied from */ #ifndef FOPEN #define FOPEN 0xFFFFFFFF #define FREAD 0x01 #define FWRITE 0x02 #define FNDELAY 0x04 #define FAPPEND 0x08 #define FSYNC 0x10 #define FNONBLOCK 0x80 #define FMASK 0xFF /* should be disjoint from FASYNC */ /* open-only modes */ #define FCREAT 0x0100 #define FTRUNC 0x0200 #define FEXCL 0x0400 #define FNOCTTY 0x0800 #define FASYNC 0x1000 /* file descriptor flags */ #define FCLOSEXEC 001 /* close on exec */ #endif /* * File segment locking set data type - information passed to system by user. */ #if defined(_KERNEL) || defined(_KMEMUSER) /* EFT definition */ typedef struct flock { short l_type; short l_whence; off_t l_start; off_t l_len; /* len == 0 means until end of file */ int l_sysid; pid_t l_pid; long pad[4]; /* reserve area */ } flock_t; typedef struct o_flock { short l_type; short l_whence; int l_start; int l_len; /* len == 0 means until end of file */ short l_sysid; o_pid_t l_pid; } o_flock_t; #else /* user level definition */ #if defined(_STYPES) /* SVR3 definition */ typedef struct flock { short l_type; short l_whence; off_t l_start; off_t l_len; /* len == 0 means until end of file */ short l_sysid; o-pid_t l_pid; } flock_t; #else typedef struct flock { short l_type; short l_whence; off_t l_start; off_t l_len; /* len == 0 means until end of file */ int l_sysid; pid_t l_pid; long pad[4]; /* reserve area */ } flock_t; #endif /* define(_STYPES) */ #endif /* defined(_KERNEL) */ /* * File segment locking types. */ #define F_RDLCK 01 /* Read lock */ #define F_WRLCK 02 /* Write lock */ #define F_UNLCK 03 /* Remove lock(s) */ /* * POSIX constants */ #define O_ACCMODE 3 /* Mask for file access modes */ #define FD_CLOEXEC 1 /* close on exec flag */ /* large file compilation environment setup */ #if !defined(_LP64) && _FILE_OFFSET_BITS == 64 #ifdef __PRAGMA_REDEFINE_EXTNAME #pragma redefine_extname open open64 #pragma redefine_extname creat creat64 #else #define open open64 #define creat creat64 #endif #endif /* !_LP64 && _FILE_OFFSET_BITS == 64 */ #if defined(_LP64) && defined(_LARGEFILE64_SOURCE) #ifdef __PRAGMA_REDEFINE_EXTNAME #pragma redefine_extname open64 open #pragma redefine_extname creat64 creat #else #define open64 open #define creat64 creat #endif #endif /* _LP64 && _LARGEFILE64_SOURCE */ #if defined(__STDC__) extern int fcntl(int, int, ...); extern int open(const char *, int, ...); extern int creat(const char *, mode_t); #if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \ !defined(__PRAGMA_REDEFINE_EXTNAME)) extern int open64(const char *, int, ...); extern int creat64(const char *, mode_t); #endif #endif #ifdef __cplusplus } #endif #endif /* _SYS_FCNTL_H */