1 
2 #ifndef __SYS_HANDLE_H__
3 #define __SYS_HANDLE_H__
4 
5 #include <sys/queue.h>
6 #include <sys/disk.h>
7 #include <sys/vfs.h>
8 
9 struct Handle;
10 typedef struct Handle Handle;
11 
12 #define HANDLE_TYPE_FILE	1
13 #define HANDLE_TYPE_CONSOLE	2
14 
15 typedef TAILQ_HEAD(HandleQueue, Handle) HandleQueue;
16 
17 typedef struct Handle {
18     uint64_t		fd;				// FD Number
19     uint64_t		type;				// Type
20     uint64_t		processId;			// Process ID
21     VNode		*vnode;				// File VNode
22     TAILQ_ENTRY(Handle)	handleList;			// Hash table
23     int (*read)(Handle *, void *, uint64_t, uint64_t);	// Read
24     int (*write)(Handle *, void *, uint64_t, uint64_t);	// Write
25     int (*flush)(Handle *);				// Flush
26     int (*close)(Handle *);				// Close
27 } Handle;
28 
29 DECLARE_SLAB(Handle);
30 
31 #endif /* __SYS_HANDLE_H__ */
32 
33