Ticket #43245: fcntl.h

File fcntl.h, 14.8 KB (added by ballapete (Peter "Pete" Dyballa), 10 years ago)

/usr/include/sys/fcntl.h

Line 
1/*
2 * Copyright (c) 2000-2005 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#include <sys/_types.h>
73#include <sys/cdefs.h>
74
75/* We should not be exporting size_t here.  Temporary for gcc bootstrapping. */
76#ifndef _SIZE_T
77#define _SIZE_T
78typedef __darwin_size_t size_t;
79#endif
80
81#ifndef _MODE_T
82typedef __darwin_mode_t mode_t;
83#define _MODE_T
84#endif
85
86#ifndef _OFF_T
87typedef __darwin_off_t  off_t;
88#define _OFF_T
89#endif
90
91#ifndef _PID_T
92typedef __darwin_pid_t  pid_t;
93#define _PID_T
94#endif
95
96/*
97 * File status flags: these are used by open(2), fcntl(2).
98 * They are also used (indirectly) in the kernel file structure f_flags,
99 * which is a superset of the open/fcntl flags.  Open flags and f_flags
100 * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
101 * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
102 */
103/* open-only flags */
104#define O_RDONLY        0x0000          /* open for reading only */
105#define O_WRONLY        0x0001          /* open for writing only */
106#define O_RDWR          0x0002          /* open for reading and writing */
107#define O_ACCMODE       0x0003          /* mask for above modes */
108
109/*
110 * Kernel encoding of open mode; separate read and write bits that are
111 * independently testable: 1 greater than the above.
112 *
113 * XXX
114 * FREAD and FWRITE are excluded from the #ifdef KERNEL so that TIOCFLUSH,
115 * which was documented to use FREAD/FWRITE, continues to work.
116 */
117#ifndef _POSIX_C_SOURCE
118#define FREAD           0x0001
119#define FWRITE          0x0002
120#endif
121#define O_NONBLOCK      0x0004          /* no delay */
122#define O_APPEND        0x0008          /* set append mode */
123#define O_SYNC          0x0080          /* synchronous writes */
124#ifndef _POSIX_C_SOURCE
125#define O_SHLOCK        0x0010          /* open with shared file lock */
126#define O_EXLOCK        0x0020          /* open with exclusive file lock */
127#define O_ASYNC         0x0040          /* signal pgrp when data ready */
128#define O_FSYNC         O_SYNC          /* source compatibility: do not use */
129#define O_NOFOLLOW  0x0100      /* don't follow symlinks */
130#endif /* _POSIX_C_SOURCE */
131#define O_CREAT         0x0200          /* create if nonexistant */
132#define O_TRUNC         0x0400          /* truncate to zero length */
133#define O_EXCL          0x0800          /* error if already exists */
134#ifndef _POSIX_C_SOURCE
135#define O_EVTONLY       0x8000          /* descriptor requested for event notifications only */
136#endif
137
138
139#ifndef _POSIX_C_SOURCE
140#define O_DIRECTORY    0x100000
141#endif
142
143/* defined by POSIX 1003.1; BSD default, so no bit required */
144#define O_NOCTTY        0               /* don't assign controlling terminal */
145//#define       O_SYNC  /* ??? POSIX: Write according to synchronized I/O file integrity completion */
146
147
148/*
149 * The O_* flags used to have only F* names, which were used in the kernel
150 * and by fcntl.  We retain the F* names for the kernel f_flags field
151 * and for backward compatibility for fcntl.
152 */
153#ifndef _POSIX_C_SOURCE
154#define FAPPEND         O_APPEND        /* kernel/compat */
155#define FASYNC          O_ASYNC         /* kernel/compat */
156#define FFSYNC          O_FSYNC         /* kernel */
157#define FNONBLOCK       O_NONBLOCK      /* kernel */
158#define FNDELAY         O_NONBLOCK      /* compat */
159#define O_NDELAY        O_NONBLOCK      /* compat */
160#endif
161
162/*
163 * Flags used for copyfile(2)
164 */
165
166#ifndef _POSIX_C_SOURCE
167#define CPF_OVERWRITE 1
168#define CPF_IGNORE_MODE 2
169#define CPF_MASK (CPF_OVERWRITE|CPF_IGNORE_MODE)
170#endif
171
172/*
173 * Constants used for fcntl(2)
174 */
175
176/* command values */
177#define F_DUPFD         0               /* duplicate file descriptor */
178#define F_GETFD         1               /* get file descriptor flags */
179#define F_SETFD         2               /* set file descriptor flags */
180#define F_GETFL         3               /* get file status flags */
181#define F_SETFL         4               /* set file status flags */
182#define F_GETOWN        5               /* get SIGIO/SIGURG proc/pgrp */
183#define F_SETOWN        6               /* set SIGIO/SIGURG proc/pgrp */
184#define F_GETLK         7               /* get record locking information */
185#define F_SETLK         8               /* set record locking information */
186#define F_SETLKW        9               /* F_SETLK; wait if blocked */
187#ifndef _POSIX_C_SOURCE
188#define F_CHKCLEAN      41              /* Used for regression test */
189#define F_PREALLOCATE   42              /* Preallocate storage */
190#define F_SETSIZE       43              /* Truncate a file without zeroing space */     
191#define F_RDADVISE      44              /* Issue an advisory read async with no copy to user */
192#define F_RDAHEAD       45              /* turn read ahead off/on */
193#define F_READBOOTSTRAP 46              /* Read bootstrap from disk */
194#define F_WRITEBOOTSTRAP 47             /* Write bootstrap on disk */
195#define F_NOCACHE       48              /* turning data caching off/on */
196#define F_LOG2PHYS      49              /* file offset to device offset */
197#define F_GETPATH       50              /* return the full path of the fd */
198#define F_FULLFSYNC     51              /* fsync + ask the drive to flush to the media */
199#define F_PATHPKG_CHECK 52              /* find which component (if any) is a package */
200#define F_FREEZE_FS     53              /* "freeze" all fs operations */
201#define F_THAW_FS       54              /* "thaw" all fs operations */
202#define F_GLOBAL_NOCACHE 55             /* turn data caching off/on (globally) for this file */
203
204// FS-specific fcntl()'s numbers begin at 0x00010000 and go up
205#define FCNTL_FS_SPECIFIC_BASE  0x00010000
206#endif /* _POSIX_C_SOURCE */
207
208/* file descriptor flags (F_GETFD, F_SETFD) */
209#define FD_CLOEXEC      1               /* close-on-exec flag */
210
211/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
212#define F_RDLCK         1               /* shared or read lock */
213#define F_UNLCK         2               /* unlock */
214#define F_WRLCK         3               /* exclusive or write lock */
215
216/*
217 * [XSI] The values used for l_whence shall be defined as described
218 * in <unistd.h>
219 */
220#ifndef SEEK_SET
221#define SEEK_SET        0       /* set file offset to offset */
222#define SEEK_CUR        1       /* set file offset to current plus offset */
223#define SEEK_END        2       /* set file offset to EOF plus offset */
224#endif  /* !SEEK_SET */
225
226/*
227 * [XSI] The symbolic names for file modes for use as values of mode_t
228 * shall be defined as described in <sys/stat.h>
229 */
230#ifndef S_IFMT
231/* File type */
232#define S_IFMT          0170000         /* [XSI] type of file mask */
233#define S_IFIFO         0010000         /* [XSI] named pipe (fifo) */
234#define S_IFCHR         0020000         /* [XSI] character special */
235#define S_IFDIR         0040000         /* [XSI] directory */
236#define S_IFBLK         0060000         /* [XSI] block special */
237#define S_IFREG         0100000         /* [XSI] regular */
238#define S_IFLNK         0120000         /* [XSI] symbolic link */
239#define S_IFSOCK        0140000         /* [XSI] socket */
240#ifndef _POSIX_C_SOURCE
241#define S_IFWHT         0160000         /* whiteout */
242#define S_IFXATTR       0200000         /* extended attribute */
243#endif
244
245/* File mode */
246/* Read, write, execute/search by owner */
247#define S_IRWXU         0000700         /* [XSI] RWX mask for owner */
248#define S_IRUSR         0000400         /* [XSI] R for owner */
249#define S_IWUSR         0000200         /* [XSI] W for owner */
250#define S_IXUSR         0000100         /* [XSI] X for owner */
251/* Read, write, execute/search by group */
252#define S_IRWXG         0000070         /* [XSI] RWX mask for group */
253#define S_IRGRP         0000040         /* [XSI] R for group */
254#define S_IWGRP         0000020         /* [XSI] W for group */
255#define S_IXGRP         0000010         /* [XSI] X for group */
256/* Read, write, execute/search by others */
257#define S_IRWXO         0000007         /* [XSI] RWX mask for other */
258#define S_IROTH         0000004         /* [XSI] R for other */
259#define S_IWOTH         0000002         /* [XSI] W for other */
260#define S_IXOTH         0000001         /* [XSI] X for other */
261
262#define S_ISUID         0004000         /* [XSI] set user id on execution */
263#define S_ISGID         0002000         /* [XSI] set group id on execution */
264#define S_ISVTX         0001000         /* [XSI] directory restrcted delete */
265
266#ifndef _POSIX_C_SOURCE
267#define S_ISTXT         S_ISVTX         /* sticky bit: not supported */
268#define S_IREAD         S_IRUSR         /* backward compatability */
269#define S_IWRITE        S_IWUSR         /* backward compatability */
270#define S_IEXEC         S_IXUSR         /* backward compatability */
271#endif
272#endif  /* !S_IFMT */
273
274#ifndef _POSIX_C_SOURCE
275/* allocate flags (F_PREALLOCATE) */
276
277#define F_ALLOCATECONTIG  0x00000002    /* allocate contigious space */
278#define F_ALLOCATEALL     0x00000004    /* allocate all requested space or no space at all */
279
280/* Position Modes (fst_posmode) for F_PREALLOCATE */
281
282#define F_PEOFPOSMODE 3                 /* Make it past all of the SEEK pos modes so that */
283                                        /* we can keep them in sync should we desire */ 
284#define F_VOLPOSMODE    4               /* specify volume starting postion */
285#endif /* _POSIX_C_SOURCE */
286
287/*
288 * Advisory file segment locking data type -
289 * information passed to system by user
290 */
291struct flock {
292        off_t   l_start;        /* starting offset */
293        off_t   l_len;          /* len = 0 means until end of file */
294        pid_t   l_pid;          /* lock owner */
295        short   l_type;         /* lock type: read/write, etc. */
296        short   l_whence;       /* type of l_start */
297};
298
299
300#ifndef _POSIX_C_SOURCE
301/*
302 * advisory file read data type -
303 * information passed by user to system
304 */
305struct radvisory {
306       off_t   ra_offset;
307       int     ra_count;
308};
309
310
311/* lock operations for flock(2) */
312#define LOCK_SH         0x01            /* shared file lock */
313#define LOCK_EX         0x02            /* exclusive file lock */
314#define LOCK_NB         0x04            /* don't block when locking */
315#define LOCK_UN         0x08            /* unlock file */
316
317/*  fstore_t type used by F_DEALLOCATE and F_PREALLOCATE commands */
318
319typedef struct fstore {
320        unsigned int fst_flags; /* IN: flags word */
321        int     fst_posmode;    /* IN: indicates use of offset field */
322        off_t   fst_offset;     /* IN: start of the region */
323        off_t   fst_length;     /* IN: size of the region */
324        off_t   fst_bytesalloc; /* OUT: number of bytes allocated */
325} fstore_t;
326
327/* fbootstraptransfer_t used by F_READBOOTSTRAP and F_WRITEBOOTSTRAP commands */
328
329typedef struct fbootstraptransfer {
330  off_t fbt_offset;             /* IN: offset to start read/write */
331  size_t fbt_length;          /* IN: number of bytes to transfer */
332  void *fbt_buffer;             /* IN: buffer to be read/written */
333} fbootstraptransfer_t;
334
335
336// LP64todo - should this move?
337
338/*
339 * For F_LOG2PHYS this information is passed back to user
340 * Currently only devoffset is returned - that is the VOP_BMAP
341 * result - the disk device address corresponding to the
342 * current file offset (likely set with an lseek).
343 *
344 * The flags could hold an indication of whether the # of
345 * contiguous bytes reflects the true extent length on disk,
346 * or is an advisory value that indicates there is at least that
347 * many bytes contiguous.  For some filesystems it might be too
348 * inefficient to provide anything beyond the advisory value.
349 * Flags and contiguous bytes return values are not yet implemented.
350 * For them the fcntl will nedd to switch from using BMAP to CMAP
351 * and a per filesystem type flag will be needed to interpret the
352 * contiguous bytes count result from CMAP.
353 */
354#pragma pack(4)
355
356struct log2phys {
357        unsigned int    l2p_flags;              /* unused so far */
358        off_t           l2p_contigbytes;        /* unused so far */
359        off_t           l2p_devoffset;  /* bytes into device */
360};
361
362#pragma pack()
363
364#define O_POPUP    0x80000000   /* force window to popup on open */
365#define O_ALERT    0x20000000   /* small, clean popup window */
366#endif /* _POSIX_C_SOURCE */
367
368
369#ifndef _POSIX_C_SOURCE
370#ifndef _FILESEC_T
371struct _filesec;
372typedef struct _filesec *filesec_t;
373#define _FILESEC_T
374#endif
375typedef enum {
376        FILESEC_OWNER = 1,
377        FILESEC_GROUP = 2,
378        FILESEC_UUID = 3,
379        FILESEC_MODE = 4,
380        FILESEC_ACL = 5,
381        FILESEC_GRPUUID = 6,
382
383/* XXX these are private to the implementation */
384        FILESEC_ACL_RAW = 100,
385        FILESEC_ACL_ALLOCSIZE = 101
386} filesec_property_t;
387
388/* XXX backwards compatibility */
389#define FILESEC_GUID FILESEC_UUID
390#endif /* _POSIX_C_SOURCE */
391
392__BEGIN_DECLS
393int     open(const char *, int, ...);
394int     creat(const char *, mode_t);
395int     fcntl(int, int, ...);
396#ifndef _POSIX_C_SOURCE
397int     openx_np(const char *, int, filesec_t);
398int     flock(int, int);
399filesec_t filesec_init(void);
400filesec_t filesec_dup(filesec_t);
401void    filesec_free(filesec_t);
402int     filesec_get_property(filesec_t, filesec_property_t, void *);
403int     filesec_set_property(filesec_t, filesec_property_t, const void *);
404int     filesec_unset_property(filesec_t, filesec_property_t);
405int     filesec_query_property(filesec_t, filesec_property_t, int *);
406#define _FILESEC_UNSET_PROPERTY ((void *)0)
407#define _FILESEC_REMOVE_ACL     ((void *)1)
408#endif /* !_POSIX_C_SOURCE */
409__END_DECLS
410
411#endif /* !_SYS_FCNTL_H_ */