1#ifndef joedb_Posix_File_declared
2#define joedb_Posix_File_declared
10#define JOEDB_HAS_BROKEN_POSIX_LOCKING
21 int lock(
int command,
short type, int64_t start, int64_t size);
41 size_t pread(
char *buffer,
size_t size, int64_t offset)
const override;
42 void pwrite(
const char *buffer,
size_t size, int64_t offset)
override;
45#if _POSIX_SYNCHRONIZED_IO > 0
49 void shared_lock(int64_t start, int64_t size)
override;
51 void unlock(int64_t start, int64_t size)
noexcept override;
virtual void datasync()
Write data durably to permanent storage.
size_t pread(char *buffer, size_t size, int64_t offset) const override
Read a range of bytes.
static void throw_last_error(const char *action, const char *file_name)
void pwrite(const char *buffer, size_t size, int64_t offset) override
Write a range of bytes. Extend file size if necessary.
Posix_FD & operator=(const Posix_FD &)=delete
bool try_exclusive_lock(int64_t start, int64_t size)
int64_t get_size() const override
Get the size of the file, or -1 if it is unknown.
void sync() override
Write data and meta-data (such as file size) durably to permanent storage.
void unlock(int64_t start, int64_t size) noexcept override
Remove a lock. The range should match the range of a corresponding lock.
void shared_lock(int64_t start, int64_t size) override
Lock a range of bytes for reading (prevents writes, not reads)
void exclusive_lock(int64_t start, int64_t size) override
Lock a range of bytes for writing (prevents both writes and reads)
Posix_FD(const Posix_FD &)=delete
Posix_FD(int fd, Open_Mode mode)
Posix_File(const std::string &file_name, Open_Mode mode)
static constexpr bool lockable
Posix_File(int fd, Open_Mode mode)