2007-07-22 Roland McGrath <roland@frob.com>
[kopensolaris-gnu/glibc.git] / sysdeps / mach / hurd / bits / fcntl.h
1 /* O_*, F_*, FD_* bit values for GNU.
2    Copyright (C) 1993,1994,1996,1997,1998,1999,2000,2001,2004,2007
3         Free Software Foundation, Inc.
4    This file is part of the GNU C Library.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, write to the Free
18    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19    02111-1307 USA.  */
20
21 #ifndef _FCNTL_H
22 # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
23 #endif
24
25 /* File access modes.  These are understood by io servers; they can be
26    passed in `dir_lookup', and are returned by `io_get_openmodes'.
27    Consequently they can be passed to `open', `hurd_file_name_lookup', and
28    `file_name_lookup'; and are returned by `fcntl' with the F_GETFL
29    command.  */
30
31 /* In GNU, read and write are bits (unlike BSD).  */
32 #ifdef __USE_GNU
33 # define O_READ         O_RDONLY /* Open for reading.  */
34 # define O_WRITE        O_WRONLY /* Open for writing.  */
35 # define O_EXEC         0x0004  /* Open for execution.  */
36 # define O_NORW         0       /* Open without R/W access.  */
37 #endif
38 /* POSIX.1 standard names.  */
39 #define O_RDONLY        0x0001  /* Open read-only.  */
40 #define O_WRONLY        0x0002  /* Open write-only.  */
41 #define O_RDWR          (O_RDONLY|O_WRONLY) /* Open for reading and writing. */
42 #define O_ACCMODE       O_RDWR  /* Mask for file access modes.  */
43
44 #define O_LARGEFILE     0
45
46
47 /* File name translation flags.  These are understood by io servers;
48    they can be passed in `dir_lookup', and consequently to `open',
49    `hurd_file_name_lookup', and `file_name_lookup'.  */
50
51 #define O_CREAT         0x0010  /* Create file if it doesn't exist.  */
52 #define O_EXCL          0x0020  /* Fail if file already exists.  */
53 #ifdef __USE_GNU
54 # define O_NOLINK       0x0040  /* No name mappings on final component.  */
55 # define O_NOTRANS      0x0080  /* No translator on final component. */
56
57 # define O_NOFOLLOW     0x00100000 /* Produce ENOENT if file is a symlink.  */
58 # define O_DIRECTORY    0x00200000 /* Produce ENOTDIR if not a directory.  */
59 #endif
60
61
62 /* I/O operating modes.  These are understood by io servers; they can be
63    passed in `dir_lookup' and set or fetched with `io_*_openmodes'.
64    Consequently they can be passed to `open', `hurd_file_name_lookup',
65    `file_name_lookup', and `fcntl' with the F_SETFL command; and are
66    returned by `fcntl' with the F_GETFL command.  */
67
68 #define O_APPEND        0x0100  /* Writes always append to the file.  */
69 #define O_ASYNC         0x0200  /* Send SIGIO to owner when data is ready.  */
70 #define O_FSYNC         0x0400  /* Synchronous writes.  */
71 #define O_SYNC          O_FSYNC
72 #ifdef __USE_GNU
73 # define O_NOATIME      0x0800  /* Don't set access time on read (owner).  */
74 # define O_CLOEXEC      0x00010000 /* Set FD_CLOEXEC.  */
75 #endif
76 #ifdef  __USE_MISC
77 # define O_SHLOCK       0x00020000 /* Open with shared file lock.  */
78 # define O_EXLOCK       0x00040000 /* Open with exclusive file lock.  */
79 #endif
80
81 /* These are lesser flavors of partial synchronization that are
82    implied by our one flag (O_FSYNC).  */
83 #if defined __USE_POSIX199309 || defined __USE_UNIX98
84 # define O_DSYNC        O_SYNC  /* Synchronize data.  */
85 # define O_RSYNC        O_SYNC  /* Synchronize read operations.  */
86 #endif
87
88
89 /* The name O_NONBLOCK is unfortunately overloaded; it is both a file name
90    translation flag and an I/O operating mode.  O_NDELAY is the deprecated
91    BSD name for the same flag, overloaded in the same way.
92
93    When used in `dir_lookup' (and consequently `open', `hurd_file_name_lookup',
94    or `file_name_lookup'), O_NONBLOCK says the open should return immediately
95    instead of blocking for any significant length of time (e.g., to wait
96    for carrier detect on a serial line).  It is also saved as an I/O
97    operating mode, and after open has the following meaning.
98
99    When used in `io_*_openmodes' (and consequently `fcntl' with the F_SETFL
100    command), the O_NONBLOCK flag means to do nonblocking i/o: any i/o
101    operation that would block for any significant length of time will instead
102    fail with EAGAIN.  */
103
104 #define O_NONBLOCK      0x0008  /* Non-blocking open or non-blocking I/O.  */
105 #ifdef __USE_BSD
106 # define O_NDELAY       O_NONBLOCK /* Deprecated.  */
107 #endif
108
109
110 #ifdef __USE_GNU
111 /* Mask of bits which are understood by io servers.  */
112 # define O_HURD         (0xffff | O_EXLOCK | O_SHLOCK)
113 #endif
114
115
116 /* Open-time action flags.  These are understood by `hurd_file_name_lookup'
117    and consequently by `open' and `file_name_lookup'.  They are not preserved
118    once the file has been opened.  */
119
120 #define O_TRUNC         0x00010000 /* Truncate file to zero length.  */
121
122
123 /* Controlling terminal flags.  These are understood only by `open',
124    and are not preserved once the file has been opened.  */
125
126 #ifdef __USE_GNU
127 # define O_IGNORE_CTTY  0x00080000 /* Don't do any ctty magic at all.  */
128 #endif
129 /* `open' never assigns a controlling terminal in GNU.  */
130 #define O_NOCTTY        0       /* Don't assign a controlling terminal.  */
131
132
133 #ifdef __USE_BSD
134 /* Bits in the file status flags returned by F_GETFL.  */
135 # define FREAD          O_RDONLY
136 # define FWRITE         O_WRONLY
137
138 /* Traditional BSD names the O_* bits.  */
139 # define FASYNC         O_ASYNC
140 # define FCREAT         O_CREAT
141 # define FEXCL          O_EXCL
142 # define FTRUNC         O_TRUNC
143 # define FNOCTTY        O_NOCTTY
144 # define FFSYNC         O_FSYNC
145 # define FSYNC          O_SYNC
146 # define FAPPEND        O_APPEND
147 # define FNONBLOCK      O_NONBLOCK
148 # define FNDELAY        O_NDELAY
149 #endif
150
151
152 /* Values for the second argument to `fcntl'.  */
153 #define F_DUPFD         0       /* Duplicate file descriptor.  */
154 #define F_GETFD         1       /* Get file descriptor flags.  */
155 #define F_SETFD         2       /* Set file descriptor flags.  */
156 #define F_GETFL         3       /* Get file status flags.  */
157 #define F_SETFL         4       /* Set file status flags.  */
158 #if defined __USE_BSD || defined __USE_UNIX98
159 # define F_GETOWN       5       /* Get owner (receiver of SIGIO).  */
160 # define F_SETOWN       6       /* Set owner (receiver of SIGIO).  */
161 #endif
162 #define F_GETLK         7       /* Get record locking info.  */
163 #define F_SETLK         8       /* Set record locking info (non-blocking).  */
164 #define F_SETLKW        9       /* Set record locking info (blocking).  */
165
166 /* File descriptor flags used with F_GETFD and F_SETFD.  */
167 #define FD_CLOEXEC      1       /* Close on exec.  */
168
169
170 #include <bits/types.h>
171
172 /* The structure describing an advisory lock.  This is the type of the third
173    argument to `fcntl' for the F_GETLK, F_SETLK, and F_SETLKW requests.  */
174 struct flock
175   {
176     int l_type;         /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
177     int l_whence;       /* Where `l_start' is relative to (like `lseek').  */
178 #ifndef __USE_FILE_OFFSET64
179     __off_t l_start;    /* Offset where the lock begins.  */
180     __off_t l_len;      /* Size of the locked area; zero means until EOF.  */
181 #else
182     __off64_t l_start;  /* Offset where the lock begins.  */
183     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
184 #endif
185     __pid_t l_pid;      /* Process holding the lock.  */
186   };
187
188 #ifdef __USE_LARGEFILE64
189 struct flock64
190   {
191     int l_type;         /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
192     int l_whence;       /* Where `l_start' is relative to (like `lseek').  */
193     __off64_t l_start;  /* Offset where the lock begins.  */
194     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
195     __pid_t l_pid;      /* Process holding the lock.  */
196   };
197 #endif
198
199 /* Values for the `l_type' field of a `struct flock'.  */
200 #define F_RDLCK 1       /* Read lock.  */
201 #define F_WRLCK 2       /* Write lock.  */
202 #define F_UNLCK 3       /* Remove lock.  */
203
204 /* Advise to `posix_fadvise'.  */
205 #ifdef __USE_XOPEN2K
206 # define POSIX_FADV_NORMAL      0 /* No further special treatment.  */
207 # define POSIX_FADV_RANDOM      1 /* Expect random page references.  */
208 # define POSIX_FADV_SEQUENTIAL  2 /* Expect sequential page references.  */
209 # define POSIX_FADV_WILLNEED    3 /* Will need these pages.  */
210 # define POSIX_FADV_DONTNEED    4 /* Don't need these pages.  */
211 # define POSIX_FADV_NOREUSE     5 /* Data will be accessed once.  */
212 #endif