Update copyright notices with scripts/update-copyrights
[platform/upstream/glibc.git] / bits / fcntl.h
1 /* O_*, F_*, FD_* bit values. 4.4BSD/Generic version.
2    Copyright (C) 1991-2014 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 #ifndef _FCNTL_H
20 #error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
21 #endif
22
23
24 /* File access modes for `open' and `fcntl'.  */
25 #define O_RDONLY        0       /* Open read-only.  */
26 #define O_WRONLY        1       /* Open write-only.  */
27 #define O_RDWR          2       /* Open read/write.  */
28
29
30 /* Bits OR'd into the second argument to open.  */
31 #define O_CREAT         0x0200  /* Create file if it doesn't exist.  */
32 #define O_EXCL          0x0800  /* Fail if file already exists.  */
33 #define O_TRUNC         0x0400  /* Truncate file to zero length.  */
34 #define O_NOCTTY        0x8000  /* Don't assign a controlling terminal.  */
35 #define O_ASYNC         0x0040  /* Send SIGIO to owner when data is ready.  */
36 #define O_FSYNC         0x0080  /* Synchronous writes.  */
37 #define O_SYNC          O_FSYNC
38 #ifdef  __USE_MISC
39 #define O_SHLOCK        0x0010  /* Open with shared file lock.  */
40 #define O_EXLOCK        0x0020  /* Open with shared exclusive lock.  */
41 #endif
42 #ifdef __USE_XOPEN2K8
43 # define O_DIRECTORY    0x00200000      /* Must be a directory.  */
44 # define O_NOFOLLOW     0x00000100      /* Do not follow links.  */
45 # define O_CLOEXEC      0x00400000      /* Set close_on_exec.  */
46 #endif
47 #if defined __USE_POSIX199309 || defined __USE_UNIX98
48 # define O_DSYNC        0x00010000      /* Synchronize data.  */
49 # define O_RSYNC        0x00020000      /* Synchronize read operations.  */
50 #endif
51
52 /* All opens support large file sizes, so there is no flag bit for this.  */
53 #ifdef __USE_LARGEFILE64
54 # define O_LARGEFILE    0
55 #endif
56
57 /* File status flags for `open' and `fcntl'.  */
58 #define O_APPEND        0x0008  /* Writes append to the file.  */
59 #define O_NONBLOCK      0x0004  /* Non-blocking I/O.  */
60
61 #ifdef __USE_BSD
62 # define O_NDELAY       O_NONBLOCK
63 #endif
64
65 #ifdef __USE_BSD
66 /* Bits in the file status flags returned by F_GETFL.
67    These are all the O_* flags, plus FREAD and FWRITE, which are
68    independent bits set by which of O_RDONLY, O_WRONLY, and O_RDWR, was
69    given to `open'.  */
70 # define FREAD          1
71 # define FWRITE         2
72
73 /* Traditional BSD names the O_* bits.  */
74 # define FASYNC         O_ASYNC
75 # define FFSYNC         O_FSYNC
76 # define FSYNC          O_SYNC
77 # define FAPPEND        O_APPEND
78 # define FNDELAY        O_NDELAY
79 #endif
80
81 /* Mask for file access modes.  This is system-dependent in case
82    some system ever wants to define some other flavor of access.  */
83 #define O_ACCMODE       (O_RDONLY|O_WRONLY|O_RDWR)
84
85 /* Values for the second argument to `fcntl'.  */
86 #define F_DUPFD         0       /* Duplicate file descriptor.  */
87 #define F_GETFD         1       /* Get file descriptor flags.  */
88 #define F_SETFD         2       /* Set file descriptor flags.  */
89 #define F_GETFL         3       /* Get file status flags.  */
90 #define F_SETFL         4       /* Set file status flags.  */
91 #if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8
92 #define F_GETOWN        5       /* Get owner (receiver of SIGIO).  */
93 #define F_SETOWN        6       /* Set owner (receiver of SIGIO).  */
94 #endif
95 #define F_GETLK         7       /* Get record locking info.  */
96 #define F_SETLK         8       /* Set record locking info (non-blocking).  */
97 #define F_SETLKW        9       /* Set record locking info (blocking).  */
98 /* Not necessary, we always have 64-bit offsets.  */
99 #define F_GETLK64       F_GETLK /* Get record locking info.  */
100 #define F_SETLK64       F_SETLK /* Set record locking info (non-blocking).  */
101 #define F_SETLKW64      F_SETLKW/* Set record locking info (blocking).  */
102 #ifdef __USE_XOPEN2K8
103 # define F_DUPFD_CLOEXEC 12     /* Duplicate file descriptor with
104                                    close-on-exit set.  */
105 #endif
106
107 /* File descriptor flags used with F_GETFD and F_SETFD.  */
108 #define FD_CLOEXEC      1       /* Close on exec.  */
109
110
111 #include <bits/types.h>
112
113 /* The structure describing an advisory lock.  This is the type of the third
114    argument to `fcntl' for the F_GETLK, F_SETLK, and F_SETLKW requests.  */
115 struct flock
116   {
117     __off_t l_start;    /* Offset where the lock begins.  */
118     __off_t l_len;      /* Size of the locked area; zero means until EOF.  */
119     __pid_t l_pid;      /* Process holding the lock.  */
120     short int l_type;   /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
121     short int l_whence; /* Where `l_start' is relative to (like `lseek').  */
122   };
123
124 #ifdef __USE_LARGEFILE64
125 /* Note this matches struct flock exactly.  */
126 struct flock64
127   {
128     __off_t l_start;    /* Offset where the lock begins.  */
129     __off_t l_len;      /* Size of the locked area; zero means until EOF.  */
130     __pid_t l_pid;      /* Process holding the lock.  */
131     short int l_type;   /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
132     short int l_whence; /* Where `l_start' is relative to (like `lseek').  */
133   };
134 #endif
135
136 /* Values for the `l_type' field of a `struct flock'.  */
137 #define F_RDLCK 1       /* Read lock.  */
138 #define F_WRLCK 2       /* Write lock.  */
139 #define F_UNLCK 3       /* Remove lock.  */
140
141 /* Advise to `posix_fadvise'.  */
142 #ifdef __USE_XOPEN2K
143 # define POSIX_FADV_NORMAL      0 /* No further special treatment.  */
144 # define POSIX_FADV_RANDOM      1 /* Expect random page references.  */
145 # define POSIX_FADV_SEQUENTIAL  2 /* Expect sequential page references.  */
146 # define POSIX_FADV_WILLNEED    3 /* Will need these pages.  */
147 # define POSIX_FADV_DONTNEED    4 /* Don't need these pages.  */
148 # define POSIX_FADV_NOREUSE     5 /* Data will be accessed once.  */
149 #endif