1 /* Copyright (C) 1991,1992,1994-2001,2003,2004,2005,2006,2007, 2009 2 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <http://www.gnu.org/licenses/>. */ 18 19 /* 20 * POSIX Standard: 6.5 File Control Operations <fcntl.h> 21 */ 22 23 #ifndef _FCNTL_H 24 #define _FCNTL_H 1 25 26 #include <features.h> 27 28 /* This must be early so <bits/fcntl.h> can define types winningly. */ 29 __BEGIN_DECLS 30 31 /* Get the definitions of O_*, F_*, FD_*: all the 32 numbers and flag bits for `open', `fcntl', et al. */ 33 #include <bits/fcntl.h> 34 35 /* For XPG all symbols from <sys/stat.h> should also be available. */ 36 #ifdef __USE_XOPEN 37 # include <sys/stat.h> 38 #endif 39 40 #ifdef __USE_MISC 41 # ifndef R_OK /* Verbatim from <unistd.h>. Ugh. */ 42 /* Values for the second argument to access. 43 These may be OR'd together. */ 44 # define R_OK 4 /* Test for read permission. */ 45 # define W_OK 2 /* Test for write permission. */ 46 # define X_OK 1 /* Test for execute permission. */ 47 # define F_OK 0 /* Test for existence. */ 48 # endif 49 #endif /* Use misc. */ 50 51 /* XPG wants the following symbols. */ 52 #ifdef __USE_XOPEN /* <stdio.h> has the same definitions. */ 53 # define SEEK_SET 0 /* Seek from beginning of file. */ 54 # define SEEK_CUR 1 /* Seek from current position. */ 55 # define SEEK_END 2 /* Seek from end of file. */ 56 #endif /* XPG */ 57 58 #ifdef __USE_ATFILE 59 # define AT_FDCWD -100 /* Special value used to indicate 60 the *at functions should use the 61 current working directory. */ 62 # define AT_SYMLINK_NOFOLLOW 0x100 /* Do not follow symbolic links. */ 63 # define AT_REMOVEDIR 0x200 /* Remove directory instead of 64 unlinking file. */ 65 # define AT_SYMLINK_FOLLOW 0x400 /* Follow symbolic links. */ 66 # ifdef __USE_GNU 67 # define AT_NO_AUTOMOUNT 0x800 /* Suppress terminal automount 68 traversal. */ 69 # define AT_EMPTY_PATH 0x1000 /* Allow empty relative pathname. */ 70 # define AT_STATX_SYNC_TYPE 0x6000 71 # define AT_STATX_SYNC_AS_STAT 0x0000 72 # define AT_STATX_FORCE_SYNC 0x2000 73 # define AT_STATX_DONT_SYNC 0x4000 74 # define AT_RECURSIVE 0x8000 /* Apply to the entire subtree. */ 75 # endif 76 # define AT_EACCESS 0x200 /* Test access permitted for 77 effective IDs, not real IDs. */ 78 #endif 79 80 /* Do the file control operation described by CMD on FD. 81 The remaining arguments are interpreted depending on CMD. 82 83 This function is a cancellation point and therefore not marked with 84 __THROW. */ 85 #if !defined(__USE_FILE_OFFSET64) || defined(__LP64__) 86 extern int fcntl (int __fd, int __cmd, ...); 87 # ifdef _LIBC 88 extern int __fcntl_nocancel(int, int, long) attribute_hidden; 89 libc_hidden_proto(fcntl) 90 # endif 91 #else 92 # ifdef __REDIRECT 93 extern int __REDIRECT (fcntl, (int __fd, int __cmd, ...), fcntl64); 94 # else 95 # define fcntl fcntl64 96 # endif 97 #endif 98 #if defined(__USE_LARGEFILE64) && !defined(__LP64__) 99 extern int fcntl64 (int __fd, int __cmd, ...); 100 # ifdef _LIBC 101 extern int __fcntl64_nocancel(int, int, long) attribute_hidden; 102 libc_hidden_proto(fcntl64) 103 # endif 104 #endif 105 106 /* Open FILE and return a new file descriptor for it, or -1 on error. 107 OFLAG determines the type of access used. If O_CREAT or O_TMPFILE 108 is on OFLAG, the third argument is taken as a `mode_t', the mode of 109 the created file. 110 111 This function is a cancellation point and therefore not marked with 112 __THROW. */ 113 #ifndef __USE_FILE_OFFSET64 114 extern int open (const char *__file, int __oflag, ...) __nonnull ((1)); 115 libc_hidden_proto(open) 116 # ifdef _LIBC 117 extern int __open2_nocancel(const char *, int) __nonnull ((1)) attribute_hidden; 118 extern int __open_nocancel(const char *, int, mode_t) __nonnull ((1)) attribute_hidden; 119 # endif 120 #else 121 # ifdef __REDIRECT 122 extern int __REDIRECT (open, (const char *__file, int __oflag, ...), open64) 123 __nonnull ((1)); 124 # else 125 # define open open64 126 # endif 127 #endif 128 #ifdef __USE_LARGEFILE64 129 extern int open64 (const char *__file, int __oflag, ...) __nonnull ((1)); 130 libc_hidden_proto(open64) 131 #endif 132 133 #ifdef __USE_ATFILE 134 /* Similar to `open' but a relative path name is interpreted relative to 135 the directory for which FD is a descriptor. 136 137 NOTE: some other `openat' implementation support additional functionality 138 through this interface, especially using the O_XATTR flag. This is not 139 yet supported here. 140 141 This function is a cancellation point and therefore not marked with 142 __THROW. */ 143 # ifndef __USE_FILE_OFFSET64 144 extern int openat (int __fd, const char *__file, int __oflag, ...) 145 __nonnull ((2)); 146 libc_hidden_proto(openat) 147 # else 148 # ifdef __REDIRECT 149 extern int __REDIRECT (openat, (int __fd, const char *__file, int __oflag, 150 ...), openat64) __nonnull ((2)); 151 # else 152 # define openat openat64 153 # endif 154 # endif 155 156 extern int openat64 (int __fd, const char *__file, int __oflag, ...) 157 __nonnull ((2)); 158 #endif 159 160 /* Create and open FILE, with mode MODE. This takes an `int' MODE 161 argument because that is what `mode_t' will be widened to. 162 163 This function is a cancellation point and therefore not marked with 164 __THROW. */ 165 #ifndef __USE_FILE_OFFSET64 166 extern int creat (const char *__file, __mode_t __mode) __nonnull ((1)); 167 #else 168 # ifdef __REDIRECT 169 extern int __REDIRECT (creat, (const char *__file, __mode_t __mode), 170 creat64) __nonnull ((1)); 171 # else 172 # define creat creat64 173 # endif 174 #endif 175 #ifdef __USE_LARGEFILE64 176 extern int creat64 (const char *__file, __mode_t __mode) __nonnull ((1)); 177 #endif 178 179 #if !defined F_LOCK && (defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \ 180 && !defined __USE_POSIX)) 181 /* NOTE: These declarations also appear in <unistd.h>; be sure to keep both 182 files consistent. Some systems have them there and some here, and some 183 software depends on the macros being defined without including both. */ 184 185 /* `lockf' is a simpler interface to the locking facilities of `fcntl'. 186 LEN is always relative to the current file position. 187 The CMD argument is one of the following. */ 188 189 # define F_ULOCK 0 /* Unlock a previously locked region. */ 190 # define F_LOCK 1 /* Lock a region for exclusive use. */ 191 # define F_TLOCK 2 /* Test and lock a region for exclusive use. */ 192 # define F_TEST 3 /* Test a region for other processes locks. */ 193 194 # ifndef __USE_FILE_OFFSET64 195 extern int lockf (int __fd, int __cmd, __off_t __len); 196 libc_hidden_proto(lockf) 197 # else 198 # ifdef __REDIRECT 199 extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len), lockf64); 200 # else 201 # define lockf lockf64 202 # endif 203 # endif 204 # ifdef __USE_LARGEFILE64 205 extern int lockf64 (int __fd, int __cmd, __off64_t __len); 206 # endif 207 #endif 208 209 #if defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__ 210 /* Advice the system about the expected behaviour of the application with 211 respect to the file associated with FD. */ 212 # ifndef __USE_FILE_OFFSET64 213 extern int posix_fadvise (int __fd, __off_t __offset, __off_t __len, 214 int __advise) __THROW; 215 # else 216 # ifdef __REDIRECT_NTH 217 extern int __REDIRECT_NTH (posix_fadvise, (int __fd, __off64_t __offset, 218 __off64_t __len, int __advise), 219 posix_fadvise64); 220 # else 221 # define posix_fadvise posix_fadvise64 222 # endif 223 # endif 224 # ifdef __USE_LARGEFILE64 225 extern int posix_fadvise64 (int __fd, __off64_t __offset, __off64_t __len, 226 int __advise) __THROW; 227 # endif 228 229 #endif 230 231 #if defined __UCLIBC_HAS_ADVANCED_REALTIME__ 232 233 /* Reserve storage for the data of the file associated with FD. 234 235 This function is a possible cancellation point and therefore not 236 marked with __THROW. */ 237 # ifndef __USE_FILE_OFFSET64 238 extern int posix_fallocate (int __fd, __off_t __offset, __off_t __len); 239 # else 240 # ifdef __REDIRECT 241 extern int __REDIRECT (posix_fallocate, (int __fd, __off64_t __offset, 242 __off64_t __len), 243 posix_fallocate64); 244 # else 245 # define posix_fallocate posix_fallocate64 246 # endif 247 # endif 248 # ifdef __USE_LARGEFILE64 249 extern int posix_fallocate64 (int __fd, __off64_t __offset, __off64_t __len); 250 # endif 251 #endif 252 253 #if (defined __UCLIBC_LINUX_SPECIFIC__ && defined __USE_GNU) || defined _LIBC 254 /* Reserve storage for the data of a file associated with FD. This function 255 is Linux-specific. For the portable version, use posix_fallocate(). 256 Unlike the latter, fallocate can operate in different modes. The default 257 mode = 0 is equivalent to posix_fallocate(). 258 259 Note: These declarations are used in posix_fallocate.c and 260 posix_fallocate64.c, so we expose them internally. 261 */ 262 263 /* Flags for fallocate's mode. */ 264 # define FALLOC_FL_KEEP_SIZE 1 /* Don't extend size of file 265 even if offset + len is 266 greater than file size. */ 267 # define FALLOC_FL_PUNCH_HOLE 2 /* Create a hole in the file. */ 268 269 # ifndef __USE_FILE_OFFSET64 270 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); 271 # else 272 # ifdef __REDIRECT 273 extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset, 274 __off64_t __len), 275 fallocate64); 276 # else 277 # define fallocate fallocate64 278 # endif 279 # endif 280 # ifdef __USE_LARGEFILE64 281 extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); 282 # endif 283 #endif 284 285 #if (defined __UCLIBC_LINUX_SPECIFIC__ && defined __USE_GNU) 286 struct file_handle { 287 unsigned handle_bytes; 288 int handle_type; 289 unsigned char f_handle[]; 290 }; 291 292 #define MAX_HANDLE_SZ 128 293 294 int name_to_handle_at(int dirfd, const char *pathname, 295 struct file_handle *handle, int *mount_id, int flags); 296 int open_by_handle_at(int mount_fd, struct file_handle *handle, int flags); 297 #endif 298 299 #ifdef __USE_GNU 300 # define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */ 301 # define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */ 302 /* Owner types. */ 303 enum __pid_type 304 { 305 F_OWNER_TID = 0, /* Kernel thread. */ 306 F_OWNER_PID, /* Process. */ 307 F_OWNER_PGRP, /* Process group. */ 308 F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */ 309 }; 310 311 /* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */ 312 struct f_owner_ex 313 { 314 enum __pid_type type; /* Owner type of ID. */ 315 __pid_t pid; /* ID of owner. */ 316 }; 317 #endif 318 319 __END_DECLS 320 321 #endif /* fcntl.h */ 322