Tkrzw
|
File implementation by memory mapping and locking for atomic operations. More...
#include <tkrzw_file_mmap.h>
Classes | |
class | Zone |
Structure to make a critical section where a region can be accessed. More... | |
Public Member Functions | |
MemoryMapAtomicFile () | |
Default constructor. More... | |
~MemoryMapAtomicFile () | |
Destructor. More... | |
MemoryMapAtomicFile (const MemoryMapAtomicFile &rhs)=delete | |
Copy and assignment are disabled. More... | |
MemoryMapAtomicFile & | operator= (const MemoryMapAtomicFile &rhs)=delete |
Status | Open (const std::string &path, bool writable, int32_t options=OPEN_DEFAULT) override |
Opens a file. More... | |
Status | Close () override |
Closes the file. More... | |
Status | MakeZone (bool writable, int64_t off, size_t size, std::unique_ptr< Zone > *zone) |
Makes an accessible zone. More... | |
Status | Read (int64_t off, void *buf, size_t size) override |
Reads data. More... | |
std::string | ReadSimple (int64_t off, size_t size) override |
Reads data, in a simple way. More... | |
Status | Write (int64_t off, const void *buf, size_t size) override |
Writes data. More... | |
Status | Append (const void *buf, size_t size, int64_t *off=nullptr) override |
Appends data at the end of the file. More... | |
Status | Expand (size_t inc_size, int64_t *old_size=nullptr) override |
Expands the file size without writing data. More... | |
Status | Truncate (int64_t size) override |
Truncates the file. More... | |
Status | TruncateFakely (int64_t size) override |
Truncate the file fakely. More... | |
Status | Synchronize (bool hard, int64_t off=0, int64_t size=0) override |
Synchronizes the content of the file to the file system. More... | |
Status | GetSize (int64_t *size) override |
Gets the size of the file. More... | |
Status | SetAllocationStrategy (int64_t init_size, double inc_factor) override |
Sets allocation strategy. More... | |
Status | CopyProperties (File *file) override |
Copies internal properties to another file object. More... | |
Status | GetPath (std::string *path) override |
Gets the path of the file. More... | |
Status | Rename (const std::string &new_path) override |
Renames the file. More... | |
Status | DisablePathOperations () override |
Disables operations related to the path. More... | |
bool | IsOpen () const override |
Checks whether the file is open. More... | |
bool | IsMemoryMapping () const override |
Checks whether operations are done by memory mapping. More... | |
bool | IsAtomic () const override |
Checks whether updating operations are atomic and thread-safe. More... | |
std::unique_ptr< File > | MakeFile () const override |
Makes a new file object of the same concrete class. More... | |
Public Member Functions inherited from tkrzw::MemoryMapFile | |
virtual | ~MemoryMapFile ()=default |
Destructor. More... | |
Public Member Functions inherited from tkrzw::File | |
virtual | ~File ()=default |
Destructor. More... | |
virtual bool | WriteSimple (int64_t off, std::string_view data) |
Writes data, in a simple way. More... | |
virtual int64_t | AppendSimple (const std::string &data) |
Appends data at the end of the file, in a simple way. More... | |
virtual int64_t | ExpandSimple (size_t inc_size) |
Expands the file size without writing data, in a simple way. More... | |
virtual int64_t | GetSizeSimple () |
Gets the size of the file, in a simple way. More... | |
virtual std::string | GetPathSimple () |
Gets the path of the file, in a simple way. More... | |
const std::type_info & | GetType () const |
Gets the type information of the actual class. More... | |
Additional Inherited Members | |
Public Types inherited from tkrzw::File | |
enum | OpenOption : int32_t { OPEN_DEFAULT = 0 , OPEN_TRUNCATE = 1 << 0 , OPEN_NO_CREATE = 1 << 1 , OPEN_NO_WAIT = 1 << 2 , OPEN_NO_LOCK = 1 << 3 , OPEN_SYNC_HARD = 1 << 4 } |
Enumeration of options for Open. More... | |
Static Public Attributes inherited from tkrzw::File | |
static constexpr int64_t | DEFAULT_ALLOC_INIT_SIZE = 1LL << 20 |
The default value of the initial allocation size. More... | |
static constexpr double | DEFAULT_ALLOC_INC_FACTOR = 2.0 |
The default value of the allocation increment factor. More... | |
File implementation by memory mapping and locking for atomic operations.
All operations are thread-safe; Multiple threads can access the same file concurrently. Also, locking assures that every operation is observed in an atomic manner.
tkrzw::MemoryMapAtomicFile::MemoryMapAtomicFile | ( | ) |
Default constructor.
tkrzw::MemoryMapAtomicFile::~MemoryMapAtomicFile | ( | ) |
Destructor.
|
explicitdelete |
Copy and assignment are disabled.
|
overridevirtual |
Opens a file.
path | A path of the file. |
writable | If true, the file is writable. If false, it is read-only. |
options | Bit-sum options of File::OpenOption enums. |
By default, exclusive locking against other processes is done for a writer and shared locking against other processes is done for a reader.
Implements tkrzw::File.
|
overridevirtual |
Status tkrzw::MemoryMapAtomicFile::MakeZone | ( | bool | writable, |
int64_t | off, | ||
size_t | size, | ||
std::unique_ptr< Zone > * | zone | ||
) |
Makes an accessible zone.
writable | If true, the region is for reading and writing. If false, the region is only for reading. |
off | The offset of the region to access. |
size | The size of the region to access. |
zone | A unique pointer to own the writable zone. |
If the writable flag is true and the region is out of the current file size, the file is expanded. If the writable flag is true and the offset is negative, the offset is set at the end of the file. If the writable flag is false and the region is out of the current file size, the size of the region is fitted to the file size or the operation fails.
|
overridevirtual |
Reads data.
off | The offset of a source region. |
buf | The pointer to the destination buffer. |
size | The size of the data to be read. |
Implements tkrzw::File.
|
overridevirtual |
Reads data, in a simple way.
off | The offset of a source region. |
size | The size of the data to be read. |
Reimplemented from tkrzw::File.
|
overridevirtual |
Writes data.
off | The offset of the destination region. |
buf | The pointer to the source buffer. |
size | The size of the data to be written. |
Implements tkrzw::File.
|
overridevirtual |
Appends data at the end of the file.
buf | The pointer to the source buffer. |
size | The size of the data to be written. |
off | The pointer to an integer object to contain the offset at which the data has been put. If it is nullptr, it is ignored. |
Implements tkrzw::File.
|
overridevirtual |
Expands the file size without writing data.
inc_size | The size to increment the file size by. |
old_size | The pointer to an integer object to contain the old size of the file. If it is nullptr, it is ignored. |
Implements tkrzw::File.
|
overridevirtual |
Truncates the file.
size | The new size of the file. |
Implements tkrzw::File.
|
overridevirtual |
Truncate the file fakely.
size | The new size of the file. |
This doesn't modify the actual file but modifies the internal length parameter, which affects behavior of Close, Synchronize, Append, Expand, and GetSize. If the specified size is more than the actual file size, the operation fails.
Implements tkrzw::File.
|
overridevirtual |
Synchronizes the content of the file to the file system.
hard | True to do physical synchronization with the hardware or false to do only logical synchronization with the file system. |
off | The offset of the region to be synchronized. |
size | The size of the region to be synchronized. If it is zero, the length to the end of file is specified. |
The pysical file size can be larger than the logical size in order to improve performance by reducing frequency of allocation. Thus, you should call this function before accessing the file with external tools.
Implements tkrzw::File.
|
overridevirtual |
Gets the size of the file.
size | The pointer to an integer object to contain the result size. |
Implements tkrzw::File.
|
overridevirtual |
Sets allocation strategy.
init_size | An initial size of allocation. |
inc_factor | A factor to increase the size of allocation. |
By default, the initial size is 1MB and the increasing factor is 2. Note that a memory map cannot be empty and its size must be aligned to the page size. This adjustment is done implicitly. This method must be called before the file is opened.
Implements tkrzw::File.
Copies internal properties to another file object.
file | The other file object. |
Implements tkrzw::File.
|
overridevirtual |
Gets the path of the file.
path | The pointer to a string object to store the path. |
Implements tkrzw::File.
|
overridevirtual |
Renames the file.
new_path | A new path of the file. |
Implements tkrzw::File.
|
overridevirtual |
Disables operations related to the path.
This should be called if the file is overwritten by external operations.
Implements tkrzw::File.
|
overridevirtual |
Checks whether the file is open.
Implements tkrzw::File.
|
overridevirtual |
Checks whether operations are done by memory mapping.
Implements tkrzw::File.
|
overridevirtual |
Checks whether updating operations are atomic and thread-safe.
Implements tkrzw::File.
|
overridevirtual |
Makes a new file object of the same concrete class.
Implements tkrzw::File.