#ifndef _SYS_FCNTL_H_ #define _SYS_FCNTL_H_ /* * This file includes the definitions for open and fcntl * described by POSIX for . */ #include #include #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) #include #endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */ /* * File status flags: these are used by open(2), fcntl(2). * They are also used (indirectly) in the kernel file structure f_flags, * which is a superset of the open/fcntl flags. Open flags and f_flags * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags). * Open/fcntl flags begin with O_; kernel-internal flags begin with F. */ /* open-only flags */ #define O_RDONLY 0x00000000 /* open for reading only */ #define O_WRONLY 0x00000001 /* open for writing only */ #define O_RDWR 0x00000002 /* open for reading and writing */ #define O_ACCMODE 0x00000003 /* mask for above modes */ /* File status flags for open() and fcntl(). POSIX Table 6-5. */ #define O_APPEND 02000 /* set append mode */ #define O_NONBLOCK 04000 /* no delay */ #define O_REOPEN 010000 /* automatically re-open device after driver * restart */ #ifndef __minix /* NOT SUPPORTED! */ #if defined(_NETBSD_SOURCE) #define O_SHLOCK 0x00000010 /* open with shared file lock */ #define O_EXLOCK 0x00000020 /* open with exclusive file lock */ #define O_ASYNC 0x00000040 /* signal pgrp when data ready */ #endif #if (_POSIX_C_SOURCE - 0) >= 199309L || \ (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \ (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE) #define O_SYNC 0x00000080 /* synchronous writes */ #endif #if defined(_NETBSD_SOURCE) #define O_NOFOLLOW 0x00000100 /* don't follow symlinks on the last */ /* path component */ #endif #endif /* !__minix */ /* Oflag values for open(). POSIX Table 6-4. */ #define O_CREAT 00100 /* creat file if it doesn't exist */ #define O_EXCL 00200 /* exclusive use flag */ #define O_NOCTTY 00400 /* do not assign a controlling terminal */ #define O_TRUNC 01000 /* truncate flag */ #ifndef __minix /* NOT SUPPORTED! */ #if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \ defined(_NETBSD_SOURCE) #define O_DSYNC 0x00010000 /* write: I/O data completion */ #define O_RSYNC 0x00020000 /* read: I/O completion as for write */ #endif #if defined(_NETBSD_SOURCE) #define O_ALT_IO 0x00040000 /* use alternate i/o semantics */ #define O_DIRECT 0x00080000 /* direct I/O hint */ #endif #endif /* !__minix */ /* * Constants used for fcntl(2) */ /* command values */ /* These values are used for cmd in fcntl(). POSIX Table 6-1. */ #define F_DUPFD 0 /* duplicate file descriptor */ #define F_GETFD 1 /* get file descriptor flags */ #define F_SETFD 2 /* set file descriptor flags */ #define F_GETFL 3 /* get file status flags */ #define F_SETFL 4 /* set file status flags */ #define F_GETLK 5 /* get record locking information */ #define F_SETLK 6 /* set record locking information */ #define F_SETLKW 7 /* set record locking info; wait if blocked */ #define F_FREESP 8 /* free a section of a regular file */ /* File descriptor flags used for fcntl(). POSIX Table 6-2. */ #define FD_CLOEXEC 1 /* close on exec flag for third arg of fcntl */ /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */ #define F_RDLCK 1 /* shared or read lock */ #define F_WRLCK 2 /* exclusive or write lock */ #define F_UNLCK 3 /* unlock */ /* * Advisory file segment locking data type - * information passed to system by user */ struct flock { short l_type; /* type: F_RDLCK, F_WRLCK, or F_UNLCK */ short l_whence; /* flag for starting offset */ off_t l_start; /* relative offset in bytes */ off_t l_len; /* size; if 0, then until EOF */ pid_t l_pid; /* process id of the locks' owner */ }; #if defined(_NETBSD_SOURCE) /* lock operations for flock(2) */ #define LOCK_SH F_RDLCK /* Shared lock */ #define LOCK_EX F_WRLCK /* Exclusive lock */ #define LOCK_NB 0x0080 /* Do not block when locking */ #define LOCK_UN F_UNLCK /* Unlock */ #endif /* Always ensure that these are consistent with and ! */ #ifndef SEEK_SET #define SEEK_SET 0 /* set file offset to offset */ #endif #ifndef SEEK_CUR #define SEEK_CUR 1 /* set file offset to current plus offset */ #endif #ifndef SEEK_END #define SEEK_END 2 /* set file offset to EOF plus offset */ #endif #include __BEGIN_DECLS int open(const char *, int, ...); int creat(const char *, mode_t); int fcntl(int, int, ...); #if defined(_NETBSD_SOURCE) int flock(int, int); #endif /* _NETBSD_SOURCE */ __END_DECLS #endif /* !_SYS_FCNTL_H_ */