brintos

brintos / linux-shallow public Read only

0
0
Text · 5.5 KiB · 80f37a0 Raw
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