modernc.org/cc@v1.0.1/v2/headers/linux_386/usr/include/i386-linux-gnu/bits/fcntl-linux.h (about)

     1  /* O_*, F_*, FD_* bit values for Linux.
     2     Copyright (C) 2001-2018 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-linux.h> directly; include <fcntl.h> instead."
    21  #endif
    22  
    23  /* This file contains shared definitions between Linux architectures
    24     and is included by <bits/fcntl.h> to declare them.  The various
    25     #ifndef cases allow the architecture specific file to define those
    26     values with different values.
    27  
    28     A minimal <bits/fcntl.h> contains just:
    29  
    30     struct flock {...}
    31     #ifdef __USE_LARGEFILE64
    32     struct flock64 {...}
    33     #endif
    34     #include <bits/fcntl-linux.h>
    35  */
    36  
    37  #ifdef __USE_GNU
    38  # include <bits/types/struct_iovec.h>
    39  #endif
    40  
    41  /* open/fcntl.  */
    42  #define O_ACCMODE	   0003
    43  #define O_RDONLY	     00
    44  #define O_WRONLY	     01
    45  #define O_RDWR		     02
    46  #ifndef O_CREAT
    47  # define O_CREAT	   0100	/* Not fcntl.  */
    48  #endif
    49  #ifndef O_EXCL
    50  # define O_EXCL		   0200	/* Not fcntl.  */
    51  #endif
    52  #ifndef O_NOCTTY
    53  # define O_NOCTTY	   0400	/* Not fcntl.  */
    54  #endif
    55  #ifndef O_TRUNC
    56  # define O_TRUNC	  01000	/* Not fcntl.  */
    57  #endif
    58  #ifndef O_APPEND
    59  # define O_APPEND	  02000
    60  #endif
    61  #ifndef O_NONBLOCK
    62  # define O_NONBLOCK	  04000
    63  #endif
    64  #ifndef O_NDELAY
    65  # define O_NDELAY	O_NONBLOCK
    66  #endif
    67  #ifndef O_SYNC
    68  # define O_SYNC	       04010000
    69  #endif
    70  #define O_FSYNC		O_SYNC
    71  #ifndef O_ASYNC
    72  # define O_ASYNC	 020000
    73  #endif
    74  #ifndef __O_LARGEFILE
    75  # define __O_LARGEFILE	0100000
    76  #endif
    77  
    78  #ifndef __O_DIRECTORY
    79  # define __O_DIRECTORY	0200000
    80  #endif
    81  #ifndef __O_NOFOLLOW
    82  # define __O_NOFOLLOW	0400000
    83  #endif
    84  #ifndef __O_CLOEXEC
    85  # define __O_CLOEXEC   02000000
    86  #endif
    87  #ifndef __O_DIRECT
    88  # define __O_DIRECT	 040000
    89  #endif
    90  #ifndef __O_NOATIME
    91  # define __O_NOATIME   01000000
    92  #endif
    93  #ifndef __O_PATH
    94  # define __O_PATH     010000000
    95  #endif
    96  #ifndef __O_DSYNC
    97  # define __O_DSYNC	 010000
    98  #endif
    99  #ifndef __O_TMPFILE
   100  # define __O_TMPFILE   (020000000 | __O_DIRECTORY)
   101  #endif
   102  
   103  #ifndef F_GETLK
   104  # ifndef __USE_FILE_OFFSET64
   105  #  define F_GETLK	5	/* Get record locking info.  */
   106  #  define F_SETLK	6	/* Set record locking info (non-blocking).  */
   107  #  define F_SETLKW	7	/* Set record locking info (blocking).  */
   108  # else
   109  #  define F_GETLK	F_GETLK64	/* Get record locking info.  */
   110  #  define F_SETLK	F_SETLK64	/* Set record locking info (non-blocking). */
   111  #  define F_SETLKW	F_SETLKW64	/* Set record locking info (blocking).  */
   112  # endif
   113  #endif
   114  #ifndef F_GETLK64
   115  # define F_GETLK64	12	/* Get record locking info.  */
   116  # define F_SETLK64	13	/* Set record locking info (non-blocking).  */
   117  # define F_SETLKW64	14	/* Set record locking info (blocking).  */
   118  #endif
   119  
   120  /* open file description locks.
   121  
   122     Usually record locks held by a process are released on *any* close and are
   123     not inherited across a fork.
   124  
   125     These cmd values will set locks that conflict with process-associated record
   126     locks, but are "owned" by the opened file description, not the process.
   127     This means that they are inherited across fork or clone with CLONE_FILES
   128     like BSD (flock) locks, and they are only released automatically when the
   129     last reference to the the file description against which they were acquired
   130     is put. */
   131  #ifdef __USE_GNU
   132  # define F_OFD_GETLK	36
   133  # define F_OFD_SETLK	37
   134  # define F_OFD_SETLKW	38
   135  #endif
   136  
   137  #ifdef __USE_LARGEFILE64
   138  # define O_LARGEFILE __O_LARGEFILE
   139  #endif
   140  
   141  #ifdef __USE_XOPEN2K8
   142  # define O_DIRECTORY	__O_DIRECTORY	/* Must be a directory.  */
   143  # define O_NOFOLLOW	__O_NOFOLLOW	/* Do not follow links.  */
   144  # define O_CLOEXEC	__O_CLOEXEC	/* Set close_on_exec.  */
   145  #endif
   146  
   147  #ifdef __USE_GNU
   148  # define O_DIRECT	__O_DIRECT	/* Direct disk access.  */
   149  # define O_NOATIME	__O_NOATIME	/* Do not set atime.  */
   150  # define O_PATH		__O_PATH	/* Resolve pathname but do not open file.  */
   151  # define O_TMPFILE	__O_TMPFILE	/* Atomically create nameless file.  */
   152  #endif
   153  
   154  /* For now, Linux has no separate synchronicity options for read
   155     operations.  We define O_RSYNC therefore as the same as O_SYNC
   156     since this is a superset.  */
   157  #if defined __USE_POSIX199309 || defined __USE_UNIX98
   158  # define O_DSYNC	__O_DSYNC	/* Synchronize data.  */
   159  # if defined __O_RSYNC
   160  #  define O_RSYNC	__O_RSYNC	/* Synchronize read operations.  */
   161  # else
   162  #  define O_RSYNC	O_SYNC	/* Synchronize read operations.  */
   163  # endif
   164  #endif
   165  
   166  /* Values for the second argument to `fcntl'.  */
   167  #define F_DUPFD		0	/* Duplicate file descriptor.  */
   168  #define F_GETFD		1	/* Get file descriptor flags.  */
   169  #define F_SETFD		2	/* Set file descriptor flags.  */
   170  #define F_GETFL		3	/* Get file status flags.  */
   171  #define F_SETFL		4	/* Set file status flags.  */
   172  
   173  #ifndef __F_SETOWN
   174  # define __F_SETOWN	8
   175  # define __F_GETOWN	9
   176  #endif
   177  
   178  #if defined __USE_UNIX98 || defined __USE_XOPEN2K8
   179  # define F_SETOWN	__F_SETOWN	/* Get owner (process receiving SIGIO).  */
   180  # define F_GETOWN	__F_GETOWN	/* Set owner (process receiving SIGIO).  */
   181  #endif
   182  
   183  #ifndef __F_SETSIG
   184  # define __F_SETSIG	10	/* Set number of signal to be sent.  */
   185  # define __F_GETSIG	11	/* Get number of signal to be sent.  */
   186  #endif
   187  #ifndef __F_SETOWN_EX
   188  # define __F_SETOWN_EX	15	/* Get owner (thread receiving SIGIO).  */
   189  # define __F_GETOWN_EX	16	/* Set owner (thread receiving SIGIO).  */
   190  #endif
   191  
   192  #ifdef __USE_GNU
   193  # define F_SETSIG	__F_SETSIG	/* Set number of signal to be sent.  */
   194  # define F_GETSIG	__F_GETSIG	/* Get number of signal to be sent.  */
   195  # define F_SETOWN_EX	__F_SETOWN_EX	/* Get owner (thread receiving SIGIO).  */
   196  # define F_GETOWN_EX	__F_GETOWN_EX	/* Set owner (thread receiving SIGIO).  */
   197  #endif
   198  
   199  #ifdef __USE_GNU
   200  # define F_SETLEASE	1024	/* Set a lease.  */
   201  # define F_GETLEASE	1025	/* Enquire what lease is active.  */
   202  # define F_NOTIFY	1026	/* Request notifications on a directory.  */
   203  # define F_SETPIPE_SZ	1031	/* Set pipe page size array.  */
   204  # define F_GETPIPE_SZ	1032	/* Set pipe page size array.  */
   205  # define F_ADD_SEALS	1033	/* Add seals to file.  */
   206  # define F_GET_SEALS	1034	/* Get seals for file.  */
   207  /* Set / get write life time hints.  */
   208  # define F_GET_RW_HINT	1035
   209  # define F_SET_RW_HINT	1036
   210  # define F_GET_FILE_RW_HINT	1037
   211  # define F_SET_FILE_RW_HINT	1038
   212  #endif
   213  #ifdef __USE_XOPEN2K8
   214  # define F_DUPFD_CLOEXEC 1030	/* Duplicate file descriptor with
   215  				   close-on-exit set.  */
   216  #endif
   217  
   218  /* For F_[GET|SET]FD.  */
   219  #define FD_CLOEXEC	1	/* Actually anything with low bit set goes */
   220  
   221  #ifndef F_RDLCK
   222  /* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
   223  # define F_RDLCK		0	/* Read lock.  */
   224  # define F_WRLCK		1	/* Write lock.  */
   225  # define F_UNLCK		2	/* Remove lock.  */
   226  #endif
   227  
   228  /* For old implementation of BSD flock.  */
   229  #ifndef F_EXLCK
   230  # define F_EXLCK		4	/* or 3 */
   231  # define F_SHLCK		8	/* or 4 */
   232  #endif
   233  
   234  #ifdef __USE_MISC
   235  /* Operations for BSD flock, also used by the kernel implementation.  */
   236  # define LOCK_SH	1	/* Shared lock.  */
   237  # define LOCK_EX	2	/* Exclusive lock.  */
   238  # define LOCK_NB	4	/* Or'd with one of the above to prevent
   239  				   blocking.  */
   240  # define LOCK_UN	8	/* Remove lock.  */
   241  #endif
   242  
   243  #ifdef __USE_GNU
   244  # define LOCK_MAND	32	/* This is a mandatory flock:  */
   245  # define LOCK_READ	64	/* ... which allows concurrent read operations.  */
   246  # define LOCK_WRITE	128	/* ... which allows concurrent write operations.  */
   247  # define LOCK_RW	192	/* ... Which allows concurrent read & write operations.  */
   248  #endif
   249  
   250  #ifdef __USE_GNU
   251  /* Types of directory notifications that may be requested with F_NOTIFY.  */
   252  # define DN_ACCESS	0x00000001	/* File accessed.  */
   253  # define DN_MODIFY	0x00000002	/* File modified.  */
   254  # define DN_CREATE	0x00000004	/* File created.  */
   255  # define DN_DELETE	0x00000008	/* File removed.  */
   256  # define DN_RENAME	0x00000010	/* File renamed.  */
   257  # define DN_ATTRIB	0x00000020	/* File changed attributes.  */
   258  # define DN_MULTISHOT	0x80000000	/* Don't remove notifier.  */
   259  #endif
   260  
   261  #ifdef __USE_GNU
   262  /* Owner types.  */
   263  enum __pid_type {
   264  	F_OWNER_TID = 0,	/* Kernel thread.  */
   265  	F_OWNER_PID,		/* Process.  */
   266  	F_OWNER_PGRP,		/* Process group.  */
   267  	F_OWNER_GID = F_OWNER_PGRP	/* Alternative, obsolete name.  */
   268  };
   269  
   270  /* Structure to use with F_GETOWN_EX and F_SETOWN_EX.  */
   271  struct f_owner_ex {
   272  	enum __pid_type type;	/* Owner type of ID.  */
   273  	__pid_t pid;		/* ID of owner.  */
   274  };
   275  #endif
   276  
   277  #ifdef __USE_GNU
   278  /* Types of seals.  */
   279  # define F_SEAL_SEAL	0x0001	/* Prevent further seals from being set.  */
   280  # define F_SEAL_SHRINK	0x0002	/* Prevent file from shrinking.  */
   281  # define F_SEAL_GROW	0x0004	/* Prevent file from growing.  */
   282  # define F_SEAL_WRITE	0x0008	/* Prevent writes.  */
   283  #endif
   284  
   285  #ifdef __USE_GNU
   286  /* Hint values for F_{GET,SET}_RW_HINT.  */
   287  # define RWF_WRITE_LIFE_NOT_SET	0
   288  # define RWH_WRITE_LIFE_NONE	1
   289  # define RWH_WRITE_LIFE_SHORT	2
   290  # define RWH_WRITE_LIFE_MEDIUM	3
   291  # define RWH_WRITE_LIFE_LONG	4
   292  # define RWH_WRITE_LIFE_EXTREME	5
   293  #endif
   294  
   295  /* Define some more compatibility macros to be backward compatible with
   296     BSD systems which did not managed to hide these kernel macros.  */
   297  #ifdef	__USE_MISC
   298  # define FAPPEND	O_APPEND
   299  # define FFSYNC		O_FSYNC
   300  # define FASYNC		O_ASYNC
   301  # define FNONBLOCK	O_NONBLOCK
   302  # define FNDELAY	O_NDELAY
   303  #endif				/* Use misc.  */
   304  
   305  #ifndef __POSIX_FADV_DONTNEED
   306  #  define __POSIX_FADV_DONTNEED	4
   307  #  define __POSIX_FADV_NOREUSE	5
   308  #endif
   309  /* Advise to `posix_fadvise'.  */
   310  #ifdef __USE_XOPEN2K
   311  # define POSIX_FADV_NORMAL	0	/* No further special treatment.  */
   312  # define POSIX_FADV_RANDOM	1	/* Expect random page references.  */
   313  # define POSIX_FADV_SEQUENTIAL	2	/* Expect sequential page references.  */
   314  # define POSIX_FADV_WILLNEED	3	/* Will need these pages.  */
   315  # define POSIX_FADV_DONTNEED	__POSIX_FADV_DONTNEED	/* Don't need these pages.  */
   316  # define POSIX_FADV_NOREUSE	__POSIX_FADV_NOREUSE	/* Data will be accessed once.  */
   317  #endif
   318  
   319  #ifdef __USE_GNU
   320  /* Flags for SYNC_FILE_RANGE.  */
   321  # define SYNC_FILE_RANGE_WAIT_BEFORE	1	/* Wait upon writeout of all pages
   322  						   in the range before performing the
   323  						   write.  */
   324  # define SYNC_FILE_RANGE_WRITE		2	/* Initiate writeout of all those
   325  						   dirty pages in the range which are
   326  						   not presently under writeback.  */
   327  # define SYNC_FILE_RANGE_WAIT_AFTER	4	/* Wait upon writeout of all pages in
   328  						   the range after performing the
   329  						   write.  */
   330  
   331  /* Flags for SPLICE and VMSPLICE.  */
   332  # define SPLICE_F_MOVE		1	/* Move pages instead of copying.  */
   333  # define SPLICE_F_NONBLOCK	2	/* Don't block on the pipe splicing
   334  					   (but we may still block on the fd
   335  					   we splice from/to).  */
   336  # define SPLICE_F_MORE		4	/* Expect more data.  */
   337  # define SPLICE_F_GIFT		8	/* Pages passed in are a gift.  */
   338  
   339  /* Flags for fallocate.  */
   340  # include <linux/falloc.h>
   341  
   342  /* File handle structure.  */
   343  struct file_handle {
   344  	unsigned int handle_bytes;
   345  	int handle_type;
   346  	/* File identifier.  */
   347  	unsigned char f_handle[0];
   348  };
   349  
   350  /* Maximum handle size (for now).  */
   351  # define MAX_HANDLE_SZ	128
   352  #endif
   353  
   354  /* Values for `*at' functions.  */
   355  #ifdef __USE_ATFILE
   356  # define AT_FDCWD		-100	/* Special value used to indicate
   357  					   the *at functions should use the
   358  					   current working directory. */
   359  # define AT_SYMLINK_NOFOLLOW	0x100	/* Do not follow symbolic links.  */
   360  # define AT_REMOVEDIR		0x200	/* Remove directory instead of
   361  					   unlinking file.  */
   362  # define AT_SYMLINK_FOLLOW	0x400	/* Follow symbolic links.  */
   363  # ifdef __USE_GNU
   364  #  define AT_NO_AUTOMOUNT	0x800	/* Suppress terminal automount
   365  					   traversal.  */
   366  #  define AT_EMPTY_PATH		0x1000	/* Allow empty relative pathname.  */
   367  # endif
   368  # define AT_EACCESS		0x200	/* Test access permitted for
   369  					   effective IDs, not real IDs.  */
   370  #endif
   371  
   372  __BEGIN_DECLS
   373  #ifdef __USE_GNU
   374  /* Provide kernel hint to read ahead.  */
   375  extern __ssize_t readahead(int __fd, __off64_t __offset, size_t __count) __THROW;
   376  
   377  /* Selective file content synch'ing.
   378  
   379     This function is a possible cancellation point and therefore not
   380     marked with __THROW.  */
   381  extern int sync_file_range(int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags);
   382  
   383  /* Splice address range into a pipe.
   384  
   385     This function is a possible cancellation point and therefore not
   386     marked with __THROW.  */
   387  extern __ssize_t vmsplice(int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags);
   388  
   389  /* Splice two files together.
   390  
   391     This function is a possible cancellation point and therefore not
   392     marked with __THROW.  */
   393  extern __ssize_t splice(int __fdin, __off64_t * __offin, int __fdout, __off64_t * __offout, size_t __len, unsigned int __flags);
   394  
   395  /* In-kernel implementation of tee for pipe buffers.
   396  
   397     This function is a possible cancellation point and therefore not
   398     marked with __THROW.  */
   399  extern __ssize_t tee(int __fdin, int __fdout, size_t __len, unsigned int __flags);
   400  
   401  /* Reserve storage for the data of the file associated with FD.
   402  
   403     This function is a possible cancellation point and therefore not
   404     marked with __THROW.  */
   405  # ifndef __USE_FILE_OFFSET64
   406  extern int fallocate(int __fd, int __mode, __off_t __offset, __off_t __len);
   407  # else
   408  #  ifdef __REDIRECT
   409  extern int __REDIRECT(fallocate, (int __fd, int __mode, __off64_t __offset, __off64_t __len), fallocate64);
   410  #  else
   411  #   define fallocate fallocate64
   412  #  endif
   413  # endif
   414  # ifdef __USE_LARGEFILE64
   415  extern int fallocate64(int __fd, int __mode, __off64_t __offset, __off64_t __len);
   416  # endif
   417  
   418  /* Map file name to file handle.  */
   419  extern int name_to_handle_at(int __dfd, const char *__name, struct file_handle *__handle, int *__mnt_id, int __flags) __THROW;
   420  
   421  /* Open file using the file handle.
   422  
   423     This function is a possible cancellation point and therefore not
   424     marked with __THROW.  */
   425  extern int open_by_handle_at(int __mountdirfd, struct file_handle *__handle, int __flags);
   426  
   427  #endif				/* use GNU */
   428  
   429  __END_DECLS