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. */ 64extern 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 73extern int open (__const char *__file, int __oflag, ...) __nonnull ((1)); 74#else 75# ifdef __REDIRECT 76extern 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 83extern 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 97extern int openat (int __fd, __const char *__file, int __oflag, ...) 98 __nonnull ((2)); 99# else 100# ifdef __REDIRECT 101extern 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 108extern 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 118extern int creat (__const char *__file, __mode_t __mode) __nonnull ((1)); 119#else 120# ifdef __REDIRECT 121extern 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 128extern 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 147extern int lockf (int __fd, int __cmd, __off_t __len); 148# else 149# ifdef __REDIRECT 150extern 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 156extern 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 164extern int posix_fadvise (int __fd, __off_t __offset, __off_t __len, 165 int __advise) __THROW; 166# else 167 # ifdef __REDIRECT_NTH 168extern 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 176extern 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 186extern int posix_fallocate (int __fd, __off_t __offset, __off_t __len); 187# else 188 # ifdef __REDIRECT 189extern 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 197extern 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