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