222 lines · c
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */2#ifndef _ASM_GENERIC_FCNTL_H3#define _ASM_GENERIC_FCNTL_H4 5#include <linux/types.h>6 7/*8 * FMODE_EXEC is 0x209 * FMODE_NONOTIFY is 0x400000010 * These cannot be used by userspace O_* until internal and external open11 * flags are split.12 * -Eric Paris13 */14 15/*16 * When introducing new O_* bits, please check its uniqueness in fcntl_init().17 */18 19#define O_ACCMODE 0000000320#define O_RDONLY 0000000021#define O_WRONLY 0000000122#define O_RDWR 0000000223#ifndef O_CREAT24#define O_CREAT 00000100 /* not fcntl */25#endif26#ifndef O_EXCL27#define O_EXCL 00000200 /* not fcntl */28#endif29#ifndef O_NOCTTY30#define O_NOCTTY 00000400 /* not fcntl */31#endif32#ifndef O_TRUNC33#define O_TRUNC 00001000 /* not fcntl */34#endif35#ifndef O_APPEND36#define O_APPEND 0000200037#endif38#ifndef O_NONBLOCK39#define O_NONBLOCK 0000400040#endif41#ifndef O_DSYNC42#define O_DSYNC 00010000 /* used to be O_SYNC, see below */43#endif44#ifndef FASYNC45#define FASYNC 00020000 /* fcntl, for BSD compatibility */46#endif47#ifndef O_DIRECT48#define O_DIRECT 00040000 /* direct disk access hint */49#endif50#ifndef O_LARGEFILE51#define O_LARGEFILE 0010000052#endif53#ifndef O_DIRECTORY54#define O_DIRECTORY 00200000 /* must be a directory */55#endif56#ifndef O_NOFOLLOW57#define O_NOFOLLOW 00400000 /* don't follow links */58#endif59#ifndef O_NOATIME60#define O_NOATIME 0100000061#endif62#ifndef O_CLOEXEC63#define O_CLOEXEC 02000000 /* set close_on_exec */64#endif65 66/*67 * Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using68 * the O_SYNC flag. We continue to use the existing numerical value69 * for O_DSYNC semantics now, but using the correct symbolic name for it.70 * This new value is used to request true Posix O_SYNC semantics. It is71 * defined in this strange way to make sure applications compiled against72 * new headers get at least O_DSYNC semantics on older kernels.73 *74 * This has the nice side-effect that we can simply test for O_DSYNC75 * wherever we do not care if O_DSYNC or O_SYNC is used.76 *77 * Note: __O_SYNC must never be used directly.78 */79#ifndef O_SYNC80#define __O_SYNC 0400000081#define O_SYNC (__O_SYNC|O_DSYNC)82#endif83 84#ifndef O_PATH85#define O_PATH 01000000086#endif87 88#ifndef __O_TMPFILE89#define __O_TMPFILE 02000000090#endif91 92/* a horrid kludge trying to make sure that this will fail on old kernels */93#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)94 95#ifndef O_NDELAY96#define O_NDELAY O_NONBLOCK97#endif98 99#define F_DUPFD 0 /* dup */100#define F_GETFD 1 /* get close_on_exec */101#define F_SETFD 2 /* set/clear close_on_exec */102#define F_GETFL 3 /* get file->f_flags */103#define F_SETFL 4 /* set file->f_flags */104#ifndef F_GETLK105#define F_GETLK 5106#define F_SETLK 6107#define F_SETLKW 7108#endif109#ifndef F_SETOWN110#define F_SETOWN 8 /* for sockets. */111#define F_GETOWN 9 /* for sockets. */112#endif113#ifndef F_SETSIG114#define F_SETSIG 10 /* for sockets. */115#define F_GETSIG 11 /* for sockets. */116#endif117 118#if __BITS_PER_LONG == 32 || defined(__KERNEL__)119#ifndef F_GETLK64120#define F_GETLK64 12 /* using 'struct flock64' */121#define F_SETLK64 13122#define F_SETLKW64 14123#endif124#endif /* __BITS_PER_LONG == 32 || defined(__KERNEL__) */125 126#ifndef F_SETOWN_EX127#define F_SETOWN_EX 15128#define F_GETOWN_EX 16129#endif130 131#ifndef F_GETOWNER_UIDS132#define F_GETOWNER_UIDS 17133#endif134 135/*136 * Open File Description Locks137 *138 * Usually record locks held by a process are released on *any* close and are139 * not inherited across a fork().140 *141 * These cmd values will set locks that conflict with process-associated142 * record locks, but are "owned" by the open file description, not the143 * process. This means that they are inherited across fork() like BSD (flock)144 * locks, and they are only released automatically when the last reference to145 * the the open file against which they were acquired is put.146 */147#define F_OFD_GETLK 36148#define F_OFD_SETLK 37149#define F_OFD_SETLKW 38150 151#define F_OWNER_TID 0152#define F_OWNER_PID 1153#define F_OWNER_PGRP 2154 155struct f_owner_ex {156 int type;157 __kernel_pid_t pid;158};159 160/* for F_[GET|SET]FL */161#define FD_CLOEXEC 1 /* actually anything with low bit set goes */162 163/* for posix fcntl() and lockf() */164#ifndef F_RDLCK165#define F_RDLCK 0166#define F_WRLCK 1167#define F_UNLCK 2168#endif169 170/* for old implementation of bsd flock () */171#ifndef F_EXLCK172#define F_EXLCK 4 /* or 3 */173#define F_SHLCK 8 /* or 4 */174#endif175 176/* operations for bsd flock(), also used by the kernel implementation */177#define LOCK_SH 1 /* shared lock */178#define LOCK_EX 2 /* exclusive lock */179#define LOCK_NB 4 /* or'd with one of the above to prevent180 blocking */181#define LOCK_UN 8 /* remove lock */182 183/*184 * LOCK_MAND support has been removed from the kernel. We leave the symbols185 * here to not break legacy builds, but these should not be used in new code.186 */187#define LOCK_MAND 32 /* This is a mandatory flock ... */188#define LOCK_READ 64 /* which allows concurrent read operations */189#define LOCK_WRITE 128 /* which allows concurrent write operations */190#define LOCK_RW 192 /* which allows concurrent read & write ops */191 192#define F_LINUX_SPECIFIC_BASE 1024193 194#ifndef HAVE_ARCH_STRUCT_FLOCK195struct flock {196 short l_type;197 short l_whence;198 __kernel_off_t l_start;199 __kernel_off_t l_len;200 __kernel_pid_t l_pid;201#ifdef __ARCH_FLOCK_EXTRA_SYSID202 __ARCH_FLOCK_EXTRA_SYSID203#endif204#ifdef __ARCH_FLOCK_PAD205 __ARCH_FLOCK_PAD206#endif207};208 209struct flock64 {210 short l_type;211 short l_whence;212 __kernel_loff_t l_start;213 __kernel_loff_t l_len;214 __kernel_pid_t l_pid;215#ifdef __ARCH_FLOCK64_PAD216 __ARCH_FLOCK64_PAD217#endif218};219#endif /* HAVE_ARCH_STRUCT_FLOCK */220 221#endif /* _ASM_GENERIC_FCNTL_H */222