Luna/kernel/include/fs/FileDescriptor.h

78 lines
1.3 KiB
C
Raw Normal View History

2022-10-10 17:00:24 +00:00
#pragma once
#include "fs/VFS.h"
#include <stdint.h>
struct Descriptor
{
bool is_open()
{
return m_is_open;
}
bool can_read()
{
return m_can_read && m_is_open;
}
2022-10-11 19:03:30 +00:00
bool can_write()
{
return m_can_write && m_is_open;
}
2022-10-10 17:00:24 +00:00
void close()
{
m_is_open = false;
}
VFS::Node* node()
{
return m_node;
}
2022-10-10 17:00:24 +00:00
ssize_t read(size_t size, char* buffer);
2022-10-11 19:03:30 +00:00
ssize_t write(size_t size, const char* buffer);
2022-10-10 17:00:24 +00:00
uintptr_t mmap(uintptr_t addr, size_t size, int prot, off_t offset);
2022-10-22 08:28:02 +00:00
void open(VFS::Node* node, bool can_read, bool can_write, bool able_to_block, bool close_on_exec);
2022-10-10 17:00:24 +00:00
int seek(long offset);
long offset()
{
return (long)m_offset;
}
unsigned long length()
{
return m_node->length;
}
2022-10-21 19:51:03 +00:00
bool able_to_block()
{
return m_able_to_block;
}
2022-10-22 08:28:02 +00:00
bool close_on_exec()
{
return m_close_on_exec;
}
void set_close_on_exec(bool value)
{
m_close_on_exec = value;
}
2022-10-10 17:00:24 +00:00
Descriptor(const Descriptor& other);
Descriptor();
const Descriptor& operator=(const Descriptor& other);
2022-10-10 17:00:24 +00:00
private:
bool m_is_open;
bool m_can_read;
2022-10-11 19:03:30 +00:00
bool m_can_write;
2022-10-21 19:51:03 +00:00
bool m_able_to_block;
2022-10-22 08:28:02 +00:00
bool m_close_on_exec;
VFS::Node* m_node;
uint64_t m_offset;
};