xref: /original-bsd/sys/sys/file.h (revision e74403ba)
1 /*	file.h	6.2	83/09/23	*/
2 
3 #ifdef KERNEL
4 /*
5  * Descriptor table entry.
6  * One for each kernel object.
7  */
8 struct	file {
9 	int	f_flag;		/* see below */
10 	short	f_type;		/* descriptor type */
11 	short	f_count;	/* reference count */
12 	short	f_msgcount;	/* references from message queue */
13 	struct	fileops {
14 		int	(*fo_rw)();
15 		int	(*fo_ioctl)();
16 		int	(*fo_select)();
17 		int	(*fo_close)();
18 	} *f_ops;
19 	caddr_t	f_data;		/* inode */
20 	off_t	f_offset;
21 };
22 
23 struct	file *file, *fileNFILE;
24 int	nfile;
25 struct	file *getf();
26 struct	file *falloc();
27 #endif
28 
29 /*
30  * flags- also for fcntl call.
31  */
32 #define	FOPEN		(-1)
33 #define	FREAD		00001		/* descriptor read/receive'able */
34 #define	FWRITE		00002		/* descriptor write/send'able */
35 #ifndef	F_DUPFD
36 #define	FNDELAY		00004		/* no delay */
37 #define	FAPPEND		00010		/* append on each write */
38 #endif
39 #define	FMARK		00020		/* mark during gc() */
40 #define	FDEFER		00040		/* defer for next gc pass */
41 #ifndef	F_DUPFD
42 #define	FASYNC		00100		/* signal pgrp when data ready */
43 #endif
44 #define	FSHLOCK		00200		/* shared lock present */
45 #define	FEXLOCK		00400		/* exclusive lock present */
46 
47 /* bits to save after open */
48 #define	FMASK		00113
49 #define	FCNTLCANT	(FREAD|FWRITE|FMARK|FDEFER|FSHLOCK|FEXLOCK)
50 
51 /* open only modes */
52 #define	FCREAT		01000		/* create if nonexistant */
53 #define	FTRUNC		02000		/* truncate to zero length */
54 #define	FEXCL		04000		/* error if already created */
55 
56 #ifndef	F_DUPFD
57 /* fcntl(2) requests--from <fcntl.h> */
58 #define	F_DUPFD	0	/* Duplicate fildes */
59 #define	F_GETFD	1	/* Get fildes flags */
60 #define	F_SETFD	2	/* Set fildes flags */
61 #define	F_GETFL	3	/* Get file flags */
62 #define	F_SETFL	4	/* Set file flags */
63 #define	F_GETOWN 5	/* Get owner */
64 #define F_SETOWN 6	/* Set owner */
65 #endif
66 
67 /*
68  * User definitions.
69  */
70 
71 /*
72  * Open call.
73  */
74 #define	O_RDONLY	000		/* open for reading */
75 #define	O_WRONLY	001		/* open for writing */
76 #define	O_RDWR		002		/* open for read & write */
77 #define	O_NDELAY	FNDELAY		/* non-blocking open */
78 #define	O_APPEND	FAPPEND		/* append on each write */
79 #define	O_CREAT		FCREAT		/* open with file create */
80 #define	O_TRUNC		FTRUNC		/* open with truncation */
81 #define	O_EXCL		FEXCL		/* error on create if file exists */
82 
83 /*
84  * Flock call.
85  */
86 #define	LOCK_SH		1	/* shared lock */
87 #define	LOCK_EX		2	/* exclusive lock */
88 #define	LOCK_NB		4	/* don't block when locking */
89 #define	LOCK_UN		8	/* unlock */
90 
91 /*
92  * Access call.
93  */
94 #define	F_OK		0	/* does file exist */
95 #define	X_OK		1	/* is it executable by caller */
96 #define	W_OK		2	/* writable by caller */
97 #define	R_OK		4	/* readable by caller */
98 
99 /*
100  * Lseek call.
101  */
102 #define	L_SET		0	/* absolute offset */
103 #define	L_INCR		1	/* relative to current offset */
104 #define	L_XTND		2	/* relative to end of file */
105 
106 #ifdef KERNEL
107 #define	GETF(fp, fd) { \
108 	if ((unsigned)(fd) >= NOFILE || ((fp) = u.u_ofile[fd]) == NULL) { \
109 		u.u_error = EBADF; \
110 		return; \
111 	} \
112 }
113 #define	DTYPE_INODE	1	/* file */
114 #define	DTYPE_SOCKET	2	/* communications endpoint */
115 #endif
116