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, write to the Free 17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18 02111-1307 USA. */ 19 20 /* 21 * POSIX Standard: 6.5 File Control Operations <fcntl.h> 22 */ 23 24 #ifndef _FCNTL_H 25 #define _FCNTL_H 1 26 27 #include <features.h> 28 29 /* This must be early so <bits/fcntl.h> can define types winningly. */ 30 __BEGIN_DECLS 31 32 /* Get the definitions of O_*, F_*, FD_*: all the 33 numbers and flag bits for `open', `fcntl', et al. */ 34 #include <bits/fcntl.h> 35 36 /* For XPG all symbols from <sys/stat.h> should also be available. */ 37 #ifdef __USE_XOPEN 38 # include <sys/stat.h> 39 #endif 40 41 #ifdef __USE_MISC 42 # ifndef R_OK /* Verbatim from <unistd.h>. Ugh. */ 43 /* Values for the second argument to access. 44 These may be OR'd together. */ 45 # define R_OK 4 /* Test for read permission. */ 46 # define W_OK 2 /* Test for write permission. */ 47 # define X_OK 1 /* Test for execute permission. */ 48 # define F_OK 0 /* Test for existence. */ 49 # endif 50 #endif /* Use misc. */ 51 52 /* XPG wants the following symbols. */ 53 #ifdef __USE_XOPEN /* <stdio.h> has the same definitions. */ 54 # define SEEK_SET 0 /* Seek from beginning of file. */ 55 # define SEEK_CUR 1 /* Seek from current position. */ 56 # define SEEK_END 2 /* Seek from end of file. */ 57 #endif /* XPG */ 58 59 /* Do the file control operation described by CMD on FD. 60 The remaining arguments are interpreted depending on CMD. 61 62 This function is a cancellation point and therefore not marked with 63 __THROW. */ 64 extern int fcntl (int __fd, int __cmd, ...); 65 66 /* Open FILE and return a new file descriptor for it, or -1 on error. 67 OFLAG determines the type of access used. If O_CREAT is on OFLAG, 68 the third argument is taken as a `mode_t', the mode of the created file. 69 70 This function is a cancellation point and therefore not marked with 71 __THROW. */ 72 #ifndef __USE_FILE_OFFSET64 73 extern int open (__const char *__file, int __oflag, ...) __nonnull ((1)); 74 #else 75 # ifdef __REDIRECT 76 extern int __REDIRECT (open, (__const char *__file, int __oflag, ...), open64) 77 __nonnull ((1)); 78 # else 79 # define open open64 80 # endif 81 #endif 82 #ifdef __USE_LARGEFILE64 83 extern int open64 (__const char *__file, int __oflag, ...) __nonnull ((1)); 84 #endif 85 86 #ifdef __USE_ATFILE 87 /* Similar to `open' but a relative path name is interpreted relative to 88 the directory for which FD is a descriptor. 89 90 NOTE: some other `openat' implementation support additional functionality 91 through this interface, especially using the O_XATTR flag. This is not 92 yet supported here. 93 94 This function is a cancellation point and therefore not marked with 95 __THROW. */ 96 # ifndef __USE_FILE_OFFSET64 97 extern int openat (int __fd, __const char *__file, int __oflag, ...) 98 __nonnull ((2)); 99 # else 100 # ifdef __REDIRECT 101 extern int __REDIRECT (openat, (int __fd, __const char *__file, int __oflag, 102 ...), openat64) __nonnull ((2)); 103 # else 104 # define openat openat64 105 # endif 106 # endif 107 108 extern int openat64 (int __fd, __const char *__file, int __oflag, ...) 109 __nonnull ((2)); 110 #endif 111 112 /* Create and open FILE, with mode MODE. This takes an `int' MODE 113 argument because that is what `mode_t' will be widened to. 114 115 This function is a cancellation point and therefore not marked with 116 __THROW. */ 117 #ifndef __USE_FILE_OFFSET64 118 extern int creat (__const char *__file, __mode_t __mode) __nonnull ((1)); 119 #else 120 # ifdef __REDIRECT 121 extern int __REDIRECT (creat, (__const char *__file, __mode_t __mode), 122 creat64) __nonnull ((1)); 123 # else 124 # define creat creat64 125 # endif 126 #endif 127 #ifdef __USE_LARGEFILE64 128 extern int creat64 (__const char *__file, __mode_t __mode) __nonnull ((1)); 129 #endif 130 131 #if !defined F_LOCK && (defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \ 132 && !defined __USE_POSIX)) 133 /* NOTE: These declarations also appear in <unistd.h>; be sure to keep both 134 files consistent. Some systems have them there and some here, and some 135 software depends on the macros being defined without including both. */ 136 137 /* `lockf' is a simpler interface to the locking facilities of `fcntl'. 138 LEN is always relative to the current file position. 139 The CMD argument is one of the following. */ 140 141 # define F_ULOCK 0 /* Unlock a previously locked region. */ 142 # define F_LOCK 1 /* Lock a region for exclusive use. */ 143 # define F_TLOCK 2 /* Test and lock a region for exclusive use. */ 144 # define F_TEST 3 /* Test a region for other processes locks. */ 145 146 # ifndef __USE_FILE_OFFSET64 147 extern int lockf (int __fd, int __cmd, __off_t __len); 148 # else 149 # ifdef __REDIRECT 150 extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len), lockf64); 151 # else 152 # define lockf lockf64 153 # endif 154 # endif 155 # ifdef __USE_LARGEFILE64 156 extern int lockf64 (int __fd, int __cmd, __off64_t __len); 157 # endif 158 #endif 159 160 #ifdef __USE_XOPEN2K 161 /* Advice the system about the expected behaviour of the application with 162 respect to the file associated with FD. */ 163 # ifndef __USE_FILE_OFFSET64 164 extern int posix_fadvise (int __fd, __off_t __offset, __off_t __len, 165 int __advise) __THROW; 166 # else 167 # ifdef __REDIRECT_NTH 168 extern int __REDIRECT_NTH (posix_fadvise, (int __fd, __off64_t __offset, 169 __off64_t __len, int __advise), 170 posix_fadvise64); 171 # else 172 # define posix_fadvise posix_fadvise64 173 # endif 174 # endif 175 # ifdef __USE_LARGEFILE64 176 extern int posix_fadvise64 (int __fd, __off64_t __offset, __off64_t __len, 177 int __advise) __THROW; 178 # endif 179 180 181 /* Reserve storage for the data of the file associated with FD. 182 183 This function is a possible cancellation points and therefore not 184 marked with __THROW. */ 185 # ifndef __USE_FILE_OFFSET64 186 extern int posix_fallocate (int __fd, __off_t __offset, __off_t __len); 187 # else 188 # ifdef __REDIRECT 189 extern int __REDIRECT (posix_fallocate, (int __fd, __off64_t __offset, 190 __off64_t __len), 191 posix_fallocate64); 192 # else 193 # define posix_fallocate posix_fallocate64 194 # endif 195 # endif 196 # ifdef __USE_LARGEFILE64 197 extern int posix_fallocate64 (int __fd, __off64_t __offset, __off64_t __len); 198 # endif 199 #endif 200 201 202 /* Define some inlines helping to catch common problems. */ 203 #if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline \ 204 && defined __va_arg_pack_len 205 # include <bits/fcntl2.h> 206 #endif 207 208 __END_DECLS 209 210 #endif /* fcntl.h */ 211