GNU CommonC++
|
This class defines a database I/O file service that can be shared by multiple threads. More...
#include <file.h>
Public Member Functions | |
ThreadFile (const char *path) | |
Open or create a new database file. | |
virtual | ~ThreadFile () |
Close and finish a database file. | |
Error | restart (void) |
Restart an existing database; close and re-open. | |
Error | fetch (char *address=NULL, ccxx_size_t length=0, off_t position=-1) |
Fetch a portion of the file into physical memory. | |
Error | update (char *address=NULL, ccxx_size_t length=0, off_t position=-1) |
Update a portion of a file from physical memory. | |
Error | append (char *address=NULL, ccxx_size_t length=0) |
Add new data to the end of the file. | |
off_t | getPosition (void) |
Fetch the current file position marker for this thread. | |
bool | operator++ (void) |
bool | operator-- (void) |
This class defines a database I/O file service that can be shared by multiple threads.
All threads access a global copy of the database object, and mutex locks can be used to preserve transaction integrety. pread/pwrite calls can be used for optimized I/O when supported.
ThreadFile is meant for use by a threaded database server where multiple threads may each perform semi-independent operations on a given database table stored on disk. A special "fcb" structure is used to hold file "state", and pread/pwrite is used whenever possible for optimized I/O. On systems that do not offer pwread/pwrite, a Mutex lock is used to protect concurrent lseek and read/write operations. ThreadFile managed databases are assumed to be used only by the local server and through a single file descriptor.
ost::ThreadFile::ThreadFile | ( | const char * | path | ) |
Open or create a new database file.
You should also use Initial.
path | pathname of database to open. |
virtual ost::ThreadFile::~ThreadFile | ( | ) | [virtual] |
Close and finish a database file.
Error ost::ThreadFile::append | ( | char * | address = NULL , |
ccxx_size_t | length = 0 |
||
) |
Add new data to the end of the file.
address | address to use, or NULL if same as last I/O. |
length | length to use, or 0 if same as last I/O. |
Error ost::ThreadFile::fetch | ( | char * | address = NULL , |
ccxx_size_t | length = 0 , |
||
off_t | position = -1 |
||
) |
Fetch a portion of the file into physical memory.
This can use state information to fetch the current record multiple times.
address | address to use, or NULL if same as last I/O. |
length | length to use, or 0 if same as last I/O. |
position | file position to use -1 if same as last I/O. |
off_t ost::ThreadFile::getPosition | ( | void | ) |
Fetch the current file position marker for this thread.
bool ost::ThreadFile::operator++ | ( | void | ) |
bool ost::ThreadFile::operator-- | ( | void | ) |
Error ost::ThreadFile::restart | ( | void | ) | [virtual] |
Restart an existing database; close and re-open.
Reimplemented from ost::RandomFile.
Error ost::ThreadFile::update | ( | char * | address = NULL , |
ccxx_size_t | length = 0 , |
||
off_t | position = -1 |
||
) |
Update a portion of a file from physical memory.
This can use state information to commit the last read record.
address | address to use, or NULL if same as last I/O. |
length | length to use, or 0 if same as last I/O. |
position | file position to use or -1 if same as last I/O. |