mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 06:37:35 +00:00
Kernel: Add File, a base class for anything that a FileDescriptor can wrap.
FileDescriptor is getting out of control, and the layering isn't quite right so let's make a File class that everything can inherit from. Then we can stop worrying about all kinds of specifics in FileDescriptor.
This commit is contained in:
parent
75734aa003
commit
7ec1f6ab3c
2 changed files with 67 additions and 0 deletions
36
Kernel/File.h
Normal file
36
Kernel/File.h
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include <AK/Retainable.h>
|
||||
#include <AK/Types.h>
|
||||
#include <Kernel/FileSystem/FileDescriptor.h>
|
||||
|
||||
class Process;
|
||||
|
||||
class File : public Retainable<File> {
|
||||
public:
|
||||
virtual ~File();
|
||||
|
||||
virtual KResultOr<Retained<FileDescriptor>> open(int options);
|
||||
virtual void close();
|
||||
|
||||
virtual bool can_read(Process&) const = 0;
|
||||
virtual bool can_write(Process&) const = 0;
|
||||
|
||||
virtual ssize_t read(Process&, byte*, ssize_t) = 0;
|
||||
virtual ssize_t write(Process&, const byte*, ssize_t) = 0;
|
||||
virtual int ioctl(Process&, unsigned request, unsigned arg);
|
||||
virtual KResultOr<Region*> mmap(Process&, LinearAddress preferred_laddr, size_t offset, size_t size);
|
||||
|
||||
virtual String absolute_path() const = 0;
|
||||
|
||||
virtual const char* class_name() const = 0;
|
||||
|
||||
virtual bool is_seekable() const { return false; }
|
||||
|
||||
virtual bool is_device() const { return false; }
|
||||
virtual bool is_tty() const { return false; }
|
||||
virtual bool is_master_pty() const { return false; }
|
||||
virtual bool is_block_device() const { return false; }
|
||||
virtual bool is_character_device() const { return false; }
|
||||
|
||||
protected:
|
||||
File();
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue