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:
|
---|
4 | *
|
---|
5 | * open(path, oflag [,mode]) open a file
|
---|
6 | * fcntl(fd, cmd [,arg]) get or set file attributes
|
---|
7 | *
|
---|
8 | */
|
---|
9 |
|
---|
10 | #ifndef _FCNTL_H
|
---|
11 | #define _FCNTL_H
|
---|
12 |
|
---|
13 | #ifndef _TYPES_H
|
---|
14 | #include <sys/types.h>
|
---|
15 | #endif
|
---|
16 |
|
---|
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 */
|
---|
27 |
|
---|
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 */
|
---|
30 |
|
---|
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 */
|
---|
35 |
|
---|
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 */
|
---|
41 |
|
---|
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 |
|
---|
46 | /* File access modes for open() and fcntl(). POSIX Table 6-6. */
|
---|
47 | #define O_RDONLY 0 /* open(name, O_RDONLY) opens read only */
|
---|
48 | #define O_WRONLY 1 /* open(name, O_WRONLY) opens write only */
|
---|
49 | #define O_RDWR 2 /* open(name, O_RDWR) opens read/write */
|
---|
50 |
|
---|
51 | /* Mask for use with file access modes. POSIX Table 6-7. */
|
---|
52 | #define O_ACCMODE 03 /* mask for file access modes */
|
---|
53 |
|
---|
54 | /* Struct used for locking. POSIX Table 6-8. */
|
---|
55 | struct flock {
|
---|
56 | short l_type; /* type: F_RDLCK, F_WRLCK, or F_UNLCK */
|
---|
57 | short l_whence; /* flag for starting offset */
|
---|
58 | off_t l_start; /* relative offset in bytes */
|
---|
59 | off_t l_len; /* size; if 0, then until EOF */
|
---|
60 | pid_t l_pid; /* process id of the locks' owner */
|
---|
61 | };
|
---|
62 |
|
---|
63 | /* Function Prototypes. */
|
---|
64 | _PROTOTYPE( int creat, (const char *_path, _mnx_Mode_t _mode) );
|
---|
65 | _PROTOTYPE( int fcntl, (int _filedes, int _cmd, ...) );
|
---|
66 | _PROTOTYPE( int open, (const char *_path, int _oflag, ...) );
|
---|
67 |
|
---|
68 | /* For locking files. */
|
---|
69 | #define LOCK_SH F_RDLCK /* Shared lock */
|
---|
70 | #define LOCK_EX F_WRLCK /* Exclusive lock */
|
---|
71 | #define LOCK_NB 0x0080 /* Do not block when locking */
|
---|
72 | #define LOCK_UN F_UNLCK /* Unlock */
|
---|
73 |
|
---|
74 | _PROTOTYPE( int flock, (int fd, int mode) );
|
---|
75 |
|
---|
76 | #endif /* _FCNTL_H */
|
---|