1 /* The <fcntl.h> header is needed by the open() and fcntl() system calls,
2 * which have a variety of parameters and flags. They are described here.
3 * The formats of the calls to each of these are:
5 * open(path, oflag [,mode]) open a file
6 * fcntl(fd, cmd [,arg]) get or set file attributes
14 #include <sys/types.h>
17 /* These values are used for cmd in fcntl(). POSIX Table 6-1. */
18 #define F_DUPFD 0 /* duplicate file descriptor */
19 #define F_GETFD 1 /* get file descriptor flags */
20 #define F_SETFD 2 /* set file descriptor flags */
21 #define F_GETFL 3 /* get file status flags */
22 #define F_SETFL 4 /* set file status flags */
23 #define F_GETLK 5 /* get record locking information */
24 #define F_SETLK 6 /* set record locking information */
25 #define F_SETLKW 7 /* set record locking info; wait if blocked */
26 #define F_FREESP 8 /* free a section of a regular file */
28 /* File descriptor flags used for fcntl(). POSIX Table 6-2. */
29 #define FD_CLOEXEC 1 /* close on exec flag for third arg of fcntl */
31 /* L_type values for record locking with fcntl(). POSIX Table 6-3. */
32 #define F_RDLCK 1 /* shared or read lock */
33 #define F_WRLCK 2 /* exclusive or write lock */
34 #define F_UNLCK 3 /* unlock */
36 /* Oflag values for open(). POSIX Table 6-4. */
37 #define O_CREAT 00100 /* creat file if it doesn't exist */
38 #define O_EXCL 00200 /* exclusive use flag */
39 #define O_NOCTTY 00400 /* do not assign a controlling terminal */
40 #define O_TRUNC 01000 /* truncate flag */
42 /* File status flags for open() and fcntl(). POSIX Table 6-5. */
43 #define O_APPEND 02000 /* set append mode */
44 #define O_NONBLOCK 04000 /* no delay */
45 #define O_REOPEN 010000 /* automatically re-open device after driver
49 /* File access modes for open() and fcntl(). POSIX Table 6-6. */
50 #define O_RDONLY 0 /* open(name, O_RDONLY) opens read only */
51 #define O_WRONLY 1 /* open(name, O_WRONLY) opens write only */
52 #define O_RDWR 2 /* open(name, O_RDWR) opens read/write */
54 /* Mask for use with file access modes. POSIX Table 6-7. */
55 #define O_ACCMODE 03 /* mask for file access modes */
57 /* Struct used for locking. POSIX Table 6-8. */
59 short l_type
; /* type: F_RDLCK, F_WRLCK, or F_UNLCK */
60 short l_whence
; /* flag for starting offset */
61 off_t l_start
; /* relative offset in bytes */
62 off_t l_len
; /* size; if 0, then until EOF */
63 pid_t l_pid
; /* process id of the locks' owner */
66 /* Function Prototypes. */
67 _PROTOTYPE( int creat
, (const char *_path
, _mnx_Mode_t _mode
) );
68 _PROTOTYPE( int fcntl
, (int _filedes
, int _cmd
, ...) );
69 _PROTOTYPE( int open
, (const char *_path
, int _oflag
, ...) );
71 /* For locking files. */
72 #define LOCK_SH F_RDLCK /* Shared lock */
73 #define LOCK_EX F_WRLCK /* Exclusive lock */
74 #define LOCK_NB 0x0080 /* Do not block when locking */
75 #define LOCK_UN F_UNLCK /* Unlock */
77 _PROTOTYPE( int flock
, (int fd
, int mode
) );