Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


fcntl.h
001: /* O_*, F_*, FD_* bit values for Linux/x86-64.
002:    Copyright (C) 2001,2002,2004,2006,2007,2009,2010,2011
003:    Free Software Foundation, Inc.
004:    This file is part of the GNU C Library.
005: 
006:    The GNU C Library is free software; you can redistribute it and/or
007:    modify it under the terms of the GNU Lesser General Public
008:    License as published by the Free Software Foundation; either
009:    version 2.1 of the License, or (at your option) any later version.
010: 
011:    The GNU C Library is distributed in the hope that it will be useful,
012:    but WITHOUT ANY WARRANTY; without even the implied warranty of
013:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014:    Lesser General Public License for more details.
015: 
016:    You should have received a copy of the GNU Lesser General Public
017:    License along with the GNU C Library; if not, write to the Free
018:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
019:    02111-1307 USA.  */
020: 
021: #ifndef _FCNTL_H
022: # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
023: #endif
024: 
025: #include <sys/types.h>
026: #include <bits/wordsize.h>
027: #ifdef __USE_GNU
028: # include <bits/uio.h>
029: #endif
030: 
031: 
032: /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
033:    located on a few file systems.  */
034: #define O_ACCMODE          0003
035: #define O_RDONLY             00
036: #define O_WRONLY             01
037: #define O_RDWR               02
038: #define O_CREAT            0100 /* not fcntl */
039: #define O_EXCL             0200 /* not fcntl */
040: #define O_NOCTTY           0400 /* not fcntl */
041: #define O_TRUNC           01000 /* not fcntl */
042: #define O_APPEND          02000
043: #define O_NONBLOCK        04000
044: #define O_NDELAY        O_NONBLOCK
045: #define O_SYNC         04010000
046: #define O_FSYNC          O_SYNC
047: #define O_ASYNC          020000
048: 
049: #ifdef __USE_XOPEN2K8
050: # define O_DIRECTORY    0200000 /* Must be a directory.  */
051: # define O_NOFOLLOW     0400000 /* Do not follow links.  */
052: # define O_CLOEXEC     02000000 /* Set close_on_exec.  */
053: #endif
054: #ifdef __USE_GNU
055: # define O_DIRECT        040000 /* Direct disk access.  */
056: # define O_NOATIME     01000000 /* Do not set atime.  */
057: # define O_PATH       010000000 /* Resolve pathname but do not open file.  */
058: #endif
059: 
060: /* For now Linux has synchronisity options for data and read operations.
061:    We define the symbols here but let them do the same as O_SYNC since
062:    this is a superset.  */
063: #if defined __USE_POSIX199309 || defined __USE_UNIX98
064: # define O_DSYNC        010000  /* Synchronize data.  */
065: # define O_RSYNC        O_SYNC  /* Synchronize read operations.  */
066: #endif
067: 
068: #ifdef __USE_LARGEFILE64
069: # if __WORDSIZE == 64
070: #  define O_LARGEFILE   0
071: # else
072: #  define O_LARGEFILE   0100000
073: # endif
074: #endif
075: 
076: /* Values for the second argument to `fcntl'.  */
077: #define F_DUPFD         0       /* Duplicate file descriptor.  */
078: #define F_GETFD         1       /* Get file descriptor flags.  */
079: #define F_SETFD         2       /* Set file descriptor flags.  */
080: #define F_GETFL         3       /* Get file status flags.  */
081: #define F_SETFL         4       /* Set file status flags.  */
082: #if __WORDSIZE == 64
083: # define F_GETLK        5       /* Get record locking info.  */
084: # define F_SETLK        6       /* Set record locking info (non-blocking).  */
085: # define F_SETLKW       7       /* Set record locking info (blocking).  */
086: /* Not necessary, we always have 64-bit offsets.  */
087: # define F_GETLK64      5       /* Get record locking info.  */
088: # define F_SETLK64      6       /* Set record locking info (non-blocking).  */
089: # define F_SETLKW64     7       /* Set record locking info (blocking).  */
090: #else
091: # ifndef __USE_FILE_OFFSET64
092: #  define F_GETLK       5       /* Get record locking info.  */
093: #  define F_SETLK       6       /* Set record locking info (non-blocking).  */
094: #  define F_SETLKW      7       /* Set record locking info (blocking).  */
095: # else
096: #  define F_GETLK       F_GETLK64  /* Get record locking info.  */
097: #  define F_SETLK       F_SETLK64  /* Set record locking info (non-blocking).*/
098: #  define F_SETLKW      F_SETLKW64 /* Set record locking info (blocking).  */
099: # endif
100: # define F_GETLK64      12      /* Get record locking info.  */
101: # define F_SETLK64      13      /* Set record locking info (non-blocking).  */
102: # define F_SETLKW64     14      /* Set record locking info (blocking).  */
103: #endif
104: 
105: #if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8
106: # define F_SETOWN       8       /* Get owner (process receiving SIGIO).  */
107: # define F_GETOWN       9       /* Set owner (process receiving SIGIO).  */
108: #endif
109: 
110: #ifdef __USE_GNU
111: # define F_SETSIG       10      /* Set number of signal to be sent.  */
112: # define F_GETSIG       11      /* Get number of signal to be sent.  */
113: # define F_SETOWN_EX    15      /* Get owner (thread receiving SIGIO).  */
114: # define F_GETOWN_EX    16      /* Set owner (thread receiving SIGIO).  */
115: #endif
116: 
117: #ifdef __USE_GNU
118: # define F_SETLEASE     1024    /* Set a lease.  */
119: # define F_GETLEASE     1025    /* Enquire what lease is active.  */
120: # define F_NOTIFY       1026    /* Request notfications on a directory.  */
121: # define F_SETPIPE_SZ   1031    /* Set pipe page size array.  */
122: # define F_GETPIPE_SZ   1032    /* Set pipe page size array.  */
123: #endif
124: #ifdef __USE_XOPEN2K8
125: # define F_DUPFD_CLOEXEC 1030   /* Duplicate file descriptor with
126:                                    close-on-exit set.  */
127: #endif
128: 
129: /* For F_[GET|SET]FD.  */
130: #define FD_CLOEXEC      1       /* actually anything with low bit set goes */
131: 
132: /* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
133: #define F_RDLCK         0       /* Read lock.  */
134: #define F_WRLCK         1       /* Write lock.  */
135: #define F_UNLCK         2       /* Remove lock.  */
136: 
137: /* For old implementation of bsd flock().  */
138: #define F_EXLCK         4       /* or 3 */
139: #define F_SHLCK         8       /* or 4 */
140: 
141: #ifdef __USE_BSD
142: /* Operations for bsd flock(), also used by the kernel implementation.  */
143: # define LOCK_SH        1       /* shared lock */
144: # define LOCK_EX        2       /* exclusive lock */
145: # define LOCK_NB        4       /* or'd with one of the above to prevent
146:                                    blocking */
147: # define LOCK_UN        8       /* remove lock */
148: #endif
149: 
150: #ifdef __USE_GNU
151: # define LOCK_MAND      32      /* This is a mandatory flock:   */
152: # define LOCK_READ      64      /* ... which allows concurrent read operations.  */
153: # define LOCK_WRITE     128     /* ... which allows concurrent write operations.  */
154: # define LOCK_RW        192     /* ... Which allows concurrent read & write operations.  */
155: #endif
156: 
157: #ifdef __USE_GNU
158: /* Types of directory notifications that may be requested with F_NOTIFY.  */
159: # define DN_ACCESS      0x00000001      /* File accessed.  */
160: # define DN_MODIFY      0x00000002      /* File modified.  */
161: # define DN_CREATE      0x00000004      /* File created.  */
162: # define DN_DELETE      0x00000008      /* File removed.  */
163: # define DN_RENAME      0x00000010      /* File renamed.  */
164: # define DN_ATTRIB      0x00000020      /* File changed attibutes.  */
165: # define DN_MULTISHOT   0x80000000      /* Don't remove notifier.  */
166: #endif
167: 
168: struct flock
169:   {
170:     short int l_type;   /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
171:     short int l_whence; /* Where `l_start' is relative to (like `lseek').  */
172: #ifndef __USE_FILE_OFFSET64
173:     __off_t l_start;    /* Offset where the lock begins.  */
174:     __off_t l_len;      /* Size of the locked area; zero means until EOF.  */
175: #else
176:     __off64_t l_start;  /* Offset where the lock begins.  */
177:     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
178: #endif
179:     __pid_t l_pid;      /* Process holding the lock.  */
180:   };
181: 
182: #ifdef __USE_LARGEFILE64
183: struct flock64
184:   {
185:     short int l_type;   /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
186:     short int l_whence; /* Where `l_start' is relative to (like `lseek').  */
187:     __off64_t l_start;  /* Offset where the lock begins.  */
188:     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
189:     __pid_t l_pid;      /* Process holding the lock.  */
190:   };
191: #endif
192: 
193: #ifdef __USE_GNU
194: /* Owner types.  */
195: enum __pid_type
196:   {
197:     F_OWNER_TID = 0,            /* Kernel thread.  */
198:     F_OWNER_PID,                /* Process.  */
199:     F_OWNER_PGRP,               /* Process group.  */
200:     F_OWNER_GID = F_OWNER_PGRP  /* Alternative, obsolete name.  */
201:   };
202: 
203: /* Structure to use with F_GETOWN_EX and F_SETOWN_EX.  */
204: struct f_owner_ex
205:   {
206:     enum __pid_type type;       /* Owner type of ID.  */
207:     __pid_t pid;                /* ID of owner.  */
208:   };
209: #endif
210: 
211: /* Define some more compatibility macros to be backward compatible with
212:    BSD systems which did not managed to hide these kernel macros.  */
213: #ifdef  __USE_BSD
214: # define FAPPEND        O_APPEND
215: # define FFSYNC         O_FSYNC
216: # define FASYNC         O_ASYNC
217: # define FNONBLOCK      O_NONBLOCK
218: # define FNDELAY        O_NDELAY
219: #endif /* Use BSD.  */
220: 
221: /* Advise to `posix_fadvise'.  */
222: #ifdef __USE_XOPEN2K
223: # define POSIX_FADV_NORMAL      0 /* No further special treatment.  */
224: # define POSIX_FADV_RANDOM      1 /* Expect random page references.  */
225: # define POSIX_FADV_SEQUENTIAL  2 /* Expect sequential page references.  */
226: # define POSIX_FADV_WILLNEED    3 /* Will need these pages.  */
227: # define POSIX_FADV_DONTNEED    4 /* Don't need these pages.  */
228: # define POSIX_FADV_NOREUSE     5 /* Data will be accessed once.  */
229: #endif
230: 
231: 
232: #ifdef __USE_GNU
233: /* Flags for SYNC_FILE_RANGE.  */
234: # define SYNC_FILE_RANGE_WAIT_BEFORE    1 /* Wait upon writeout of all pages
235:                                              in the range before performing the
236:                                              write.  */
237: # define SYNC_FILE_RANGE_WRITE          2 /* Initiate writeout of all those
238:                                              dirty pages in the range which are
239:                                              not presently under writeback.  */
240: # define SYNC_FILE_RANGE_WAIT_AFTER     4 /* Wait upon writeout of all pages in
241:                                              the range after performing the
242:                                              write.  */
243: 
244: /* Flags for SPLICE and VMSPLICE.  */
245: # define SPLICE_F_MOVE          1       /* Move pages instead of copying.  */
246: # define SPLICE_F_NONBLOCK      2       /* Don't block on the pipe splicing
247:                                            (but we may still block on the fd
248:                                            we splice from/to).  */
249: # define SPLICE_F_MORE          4       /* Expect more data.  */
250: # define SPLICE_F_GIFT          8       /* Pages passed in are a gift.  */
251: 
252: 
253: /* File handle structure.  */
254: struct file_handle
255: {
256:   unsigned int handle_bytes;
257:   int handle_type;
258:   /* File identifier.  */
259:   unsigned char f_handle[0];
260: };
261: 
262: /* Maximum handle size (for now).  */
263: # define MAX_HANDLE_SZ  128
264: #endif
265: 
266: /* Values for `*at' functions.  */
267: #ifdef __USE_ATFILE
268: # define AT_FDCWD               -100    /* Special value used to indicate
269:                                            the *at functions should use the
270:                                            current working directory. */
271: # define AT_SYMLINK_NOFOLLOW    0x100   /* Do not follow symbolic links.  */
272: # define AT_REMOVEDIR           0x200   /* Remove directory instead of
273:                                            unlinking file.  */
274: # define AT_SYMLINK_FOLLOW      0x400   /* Follow symbolic links.  */
275: # define AT_NO_AUTOMOUNT        0x800   /* Suppress terminal automount
276:                                            traversal.  */
277: # define AT_EACCESS             0x200   /* Test access permitted for
278:                                            effective IDs, not real IDs.  */
279: #endif
280: 
281: __BEGIN_DECLS
282: 
283: #ifdef __USE_GNU
284: 
285: /* Provide kernel hint to read ahead.  */
286: extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
287:     __THROW;
288: 
289: 
290: /* Selective file content synch'ing.
291: 
292:    This function is a possible cancellation point and therefore not
293:    marked with __THROW.  */
294: extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
295:                             unsigned int __flags);
296: 
297: 
298: /* Splice address range into a pipe.
299: 
300:    This function is a possible cancellation point and therefore not
301:    marked with __THROW.  */
302: extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
303:                          size_t __count, unsigned int __flags);
304: 
305: /* Splice two files together.
306: 
307:    This function is a possible cancellation point and therefore not
308:    marked with __THROW.  */
309: extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
310:                        __off64_t *__offout, size_t __len,
311:                        unsigned int __flags);
312: 
313: /* In-kernel implementation of tee for pipe buffers.
314: 
315:    This function is a possible cancellation point and therefore not
316:    marked with __THROW.  */
317: extern ssize_t tee (int __fdin, int __fdout, size_t __len,
318:                     unsigned int __flags);
319: 
320: /* Reserve storage for the data of the file associated with FD.
321: 
322:    This function is a possible cancellation point and therefore not
323:    marked with __THROW.  */
324: # ifndef __USE_FILE_OFFSET64
325: extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
326: # else
327: #  ifdef __REDIRECT
328: extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset,
329:                                    __off64_t __len),
330:                        fallocate64);
331: #  else
332: #   define fallocate fallocate64
333: #  endif
334: # endif
335: # ifdef __USE_LARGEFILE64
336: extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
337:                         __off64_t __len);
338: # endif
339: 
340: 
341: /* Map file name to file handle.  */
342: extern int name_to_handle_at (int __dfd, const char *__name,
343:                               struct file_handle *__handle, int *__mnt_id,
344:                               int __flags) __THROW;
345: 
346: /* Open file using the file handle.
347: 
348:    This function is a possible cancellation point and therefore not
349:    marked with __THROW.  */
350: extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
351:                               int __flags);
352: 
353: #endif  /* use GNU */
354: 
355: __END_DECLS
356: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/