source: rtems-libbsd/freebsd/sys/sys/fcntl.h @ e599318

4.1155-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since e599318 was e599318, checked in by Sebastian Huber <sebastian.huber@…>, on 10/09/13 at 20:52:54

Update files to match FreeBSD layout

Add compatibility with Newlib header files. Some FreeBSD header files
are mapped by the translation script:

o rtems/bsd/sys/_types.h
o rtems/bsd/sys/errno.h
o rtems/bsd/sys/lock.h
o rtems/bsd/sys/param.h
o rtems/bsd/sys/resource.h
o rtems/bsd/sys/time.h
o rtems/bsd/sys/timespec.h
o rtems/bsd/sys/types.h
o rtems/bsd/sys/unistd.h

It is now possible to include <sys/socket.h> directly for example.

Generate one Makefile which builds everything including tests.

  • Property mode set to 100644
File size: 9.9 KB
Line 
1/*-
2 * Copyright (c) 1983, 1990, 1993
3 *      The Regents of the University of California.  All rights reserved.
4 * (c) UNIX System Laboratories, Inc.
5 * All or some portions of this file are derived from material licensed
6 * to the University of California by American Telephone and Telegraph
7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
8 * the permission of UNIX System Laboratories, Inc.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 * 4. Neither the name of the University nor the names of its contributors
19 *    may be used to endorse or promote products derived from this software
20 *    without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 * SUCH DAMAGE.
33 *
34 *      @(#)fcntl.h     8.3 (Berkeley) 1/21/94
35 * $FreeBSD$
36 */
37
38#ifndef _SYS_FCNTL_H_
39#define _SYS_FCNTL_H_
40
41/*
42 * This file includes the definitions for open and fcntl
43 * described by POSIX for <fcntl.h>; it also includes
44 * related kernel definitions.
45 */
46
47#include <sys/cdefs.h>
48#include <rtems/bsd/sys/_types.h>
49
50#ifndef _MODE_T_DECLARED
51typedef __mode_t        mode_t;
52#define _MODE_T_DECLARED
53#endif
54
55#ifndef _OFF_T_DECLARED
56typedef __off_t         off_t;
57#define _OFF_T_DECLARED
58#endif
59
60#ifndef _PID_T_DECLARED
61typedef __pid_t         pid_t;
62#define _PID_T_DECLARED
63#endif
64
65/*
66 * File status flags: these are used by open(2), fcntl(2).
67 * They are also used (indirectly) in the kernel file structure f_flags,
68 * which is a superset of the open/fcntl flags.  Open flags and f_flags
69 * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
70 * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
71 */
72/* open-only flags */
73#define O_RDONLY        0x0000          /* open for reading only */
74#define O_WRONLY        0x0001          /* open for writing only */
75#define O_RDWR          0x0002          /* open for reading and writing */
76#define O_ACCMODE       0x0003          /* mask for above modes */
77
78/*
79 * Kernel encoding of open mode; separate read and write bits that are
80 * independently testable: 1 greater than the above.
81 *
82 * XXX
83 * FREAD and FWRITE are excluded from the #ifdef _KERNEL so that TIOCFLUSH,
84 * which was documented to use FREAD/FWRITE, continues to work.
85 */
86#if __BSD_VISIBLE
87#define FREAD           0x0001
88#define FWRITE          0x0002
89#endif
90#define O_NONBLOCK      0x0004          /* no delay */
91#define O_APPEND        0x0008          /* set append mode */
92#if __BSD_VISIBLE
93#define O_SHLOCK        0x0010          /* open with shared file lock */
94#define O_EXLOCK        0x0020          /* open with exclusive file lock */
95#define O_ASYNC         0x0040          /* signal pgrp when data ready */
96#define O_FSYNC         0x0080          /* synchronous writes */
97#endif
98#define O_SYNC          0x0080          /* POSIX synonym for O_FSYNC */
99#if __BSD_VISIBLE
100#define O_NOFOLLOW      0x0100          /* don't follow symlinks */
101#endif
102#define O_CREAT         0x0200          /* create if nonexistent */
103#define O_TRUNC         0x0400          /* truncate to zero length */
104#define O_EXCL          0x0800          /* error if already exists */
105#ifdef _KERNEL
106#define FHASLOCK        0x4000          /* descriptor holds advisory lock */
107#endif
108
109/* Defined by POSIX 1003.1; BSD default, but must be distinct from O_RDONLY. */
110#define O_NOCTTY        0x8000          /* don't assign controlling terminal */
111
112#if __BSD_VISIBLE
113/* Attempt to bypass buffer cache */
114#define O_DIRECT        0x00010000
115#endif
116
117/* Defined by POSIX Extended API Set Part 2 */
118#if __BSD_VISIBLE
119#define O_DIRECTORY     0x00020000      /* Fail if not directory */
120#define O_EXEC          0x00040000      /* Open for execute only */
121#endif
122#ifdef  _KERNEL
123#define FEXEC           O_EXEC
124#endif
125
126/* Defined by POSIX 1003.1-2008; BSD default, but reserve for future use. */
127#if __POSIX_VISIBLE >= 200809
128#define O_TTY_INIT      0x00080000      /* Restore default termios attributes */
129#endif
130
131/*
132 * XXX missing O_DSYNC, O_RSYNC.
133 */
134
135#ifdef _KERNEL
136/* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
137#define FFLAGS(oflags)  ((oflags) + 1)
138#define OFLAGS(fflags)  ((fflags) - 1)
139
140/* bits to save after open */
141#define FMASK   (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK|O_DIRECT|FEXEC)
142/* bits settable by fcntl(F_SETFL, ...) */
143#define FCNTLFLAGS      (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FRDAHEAD|O_DIRECT)
144
145#if defined(COMPAT_FREEBSD7) || defined(COMPAT_FREEBSD6) || \
146    defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4)
147/*
148 * Set by shm_open(3) in older libc's to get automatic MAP_ASYNC
149 * behavior for POSIX shared memory objects (which are otherwise
150 * implemented as plain files).
151 */
152#define FPOSIXSHM       O_NOFOLLOW
153#undef FCNTLFLAGS
154#define FCNTLFLAGS      (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FPOSIXSHM|FRDAHEAD| \
155                         O_DIRECT)
156#endif
157#endif
158
159/*
160 * The O_* flags used to have only F* names, which were used in the kernel
161 * and by fcntl.  We retain the F* names for the kernel f_flag field
162 * and for backward compatibility for fcntl.  These flags are deprecated.
163 */
164#if __BSD_VISIBLE
165#define FAPPEND         O_APPEND        /* kernel/compat */
166#define FASYNC          O_ASYNC         /* kernel/compat */
167#define FFSYNC          O_FSYNC         /* kernel */
168#define FNONBLOCK       O_NONBLOCK      /* kernel */
169#define FNDELAY         O_NONBLOCK      /* compat */
170#define O_NDELAY        O_NONBLOCK      /* compat */
171#endif
172
173/*
174 * We are out of bits in f_flag (which is a short).  However,
175 * the flag bits not set in FMASK are only meaningful in the
176 * initial open syscall.  Those bits can thus be given a
177 * different meaning for fcntl(2).
178 */
179#if __BSD_VISIBLE
180/* Read ahead */
181#define FRDAHEAD        O_CREAT
182#endif
183
184/* Defined by POSIX Extended API Set Part 2 */
185#if __BSD_VISIBLE
186/*
187 * Magic value that specify the use of the current working directory
188 * to determine the target of relative file paths in the openat() and
189 * similar syscalls.
190 */
191#define AT_FDCWD                -100
192
193/*
194 * Miscellaneous flags for the *at() syscalls.
195 */
196#define AT_EACCESS              0x100   /* Check access using effective user and group ID */
197#define AT_SYMLINK_NOFOLLOW     0x200   /* Do not follow symbolic links */
198#define AT_SYMLINK_FOLLOW       0x400   /* Follow symbolic link */
199#define AT_REMOVEDIR            0x800   /* Remove directory instead of file */
200#endif
201
202/*
203 * Constants used for fcntl(2)
204 */
205
206/* command values */
207#define F_DUPFD         0               /* duplicate file descriptor */
208#define F_GETFD         1               /* get file descriptor flags */
209#define F_SETFD         2               /* set file descriptor flags */
210#define F_GETFL         3               /* get file status flags */
211#define F_SETFL         4               /* set file status flags */
212#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
213#define F_GETOWN        5               /* get SIGIO/SIGURG proc/pgrp */
214#define F_SETOWN        6               /* set SIGIO/SIGURG proc/pgrp */
215#endif
216#define F_OGETLK        7               /* get record locking information */
217#define F_OSETLK        8               /* set record locking information */
218#define F_OSETLKW       9               /* F_SETLK; wait if blocked */
219#define F_DUP2FD        10              /* duplicate file descriptor to arg */
220#define F_GETLK         11              /* get record locking information */
221#define F_SETLK         12              /* set record locking information */
222#define F_SETLKW        13              /* F_SETLK; wait if blocked */
223#define F_SETLK_REMOTE  14              /* debugging support for remote locks */
224#define F_READAHEAD     15              /* read ahead */
225#define F_RDAHEAD       16              /* Darwin compatible read ahead */
226
227/* file descriptor flags (F_GETFD, F_SETFD) */
228#define FD_CLOEXEC      1               /* close-on-exec flag */
229
230/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
231#define F_RDLCK         1               /* shared or read lock */
232#define F_UNLCK         2               /* unlock */
233#define F_WRLCK         3               /* exclusive or write lock */
234#define F_UNLCKSYS      4               /* purge locks for a given system ID */
235#define F_CANCEL        5               /* cancel an async lock request */
236#ifdef _KERNEL
237#define F_WAIT          0x010           /* Wait until lock is granted */
238#define F_FLOCK         0x020           /* Use flock(2) semantics for lock */
239#define F_POSIX         0x040           /* Use POSIX semantics for lock */
240#define F_REMOTE        0x080           /* Lock owner is remote NFS client */
241#define F_NOINTR        0x100           /* Ignore signals when waiting */
242#endif
243
244/*
245 * Advisory file segment locking data type -
246 * information passed to system by user
247 */
248struct flock {
249        off_t   l_start;        /* starting offset */
250        off_t   l_len;          /* len = 0 means until end of file */
251        pid_t   l_pid;          /* lock owner */
252        short   l_type;         /* lock type: read/write, etc. */
253        short   l_whence;       /* type of l_start */
254        int     l_sysid;        /* remote system id or zero for local */
255};
256
257/*
258 * Old advisory file segment locking data type,
259 * before adding l_sysid.
260 */
261struct oflock {
262        off_t   l_start;        /* starting offset */
263        off_t   l_len;          /* len = 0 means until end of file */
264        pid_t   l_pid;          /* lock owner */
265        short   l_type;         /* lock type: read/write, etc. */
266        short   l_whence;       /* type of l_start */
267};
268
269
270#if __BSD_VISIBLE
271/* lock operations for flock(2) */
272#define LOCK_SH         0x01            /* shared file lock */
273#define LOCK_EX         0x02            /* exclusive file lock */
274#define LOCK_NB         0x04            /* don't block when locking */
275#define LOCK_UN         0x08            /* unlock file */
276#endif
277
278/*
279 * XXX missing posix_fadvise() and posix_fallocate(), and POSIX_FADV_* macros.
280 */
281
282#ifndef _KERNEL
283__BEGIN_DECLS
284int     open(const char *, int, ...);
285int     creat(const char *, mode_t);
286int     fcntl(int, int, ...);
287#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
288int     openat(int, const char *, int, ...);
289#endif
290#if __BSD_VISIBLE
291int     flock(int, int);
292#endif
293__END_DECLS
294#endif
295
296#endif /* !_SYS_FCNTL_H_ */
Note: See TracBrowser for help on using the repository browser.