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) |
![]() | |
virtual | ~RandomFile () |
Destroy a random access file or it's derived class. | |
bool | initial (void) |
This method should be called right after a RandomFile derived object has been created. | |
off_t | getCapacity (void) |
Get current file capacity. | |
virtual Error | restart (void) |
This method is commonly used to close and re-open an existing database. | |
Error | getErrorNumber (void) |
Return current error id. | |
char * | getErrorString (void) |
Return current error string. | |
bool | operator! (void) |
Additional Inherited Members | ||
![]() | ||
enum | Error { errSuccess = 0 , errNotOpened , errMapFailed , errInitFailed , errOpenDenied , errOpenFailed , errOpenInUse , errReadInterrupted , errReadIncomplete , errReadFailure , errWriteInterrupted , errWriteIncomplete , errWriteFailure , errLockFailure , errExtended } | |
enum | Access { accessReadOnly = O_RDONLY , accessWriteOnly = O_WRONLY , accessReadWrite = O_RDWR } | |
enum | Open { openReadOnly = O_RDONLY , openWriteOnly = O_WRONLY , openReadWrite = O_RDWR , openAppend = O_WRONLY | O_APPEND , openSync = O_RDWR , openTruncate = O_RDWR | O_TRUNC } | |
enum | Attr { attrInvalid = 0 , attrPrivate = 0400 | 0200 , attrGroup = attrPrivate | 0040 | 0020 , attrPublic = attrGroup | 0004 | 0002 } | |
enum | Mapping { mappedRead = accessReadOnly , mappedWrite = accessWriteOnly , mappedReadWrite = accessReadWrite } | |
enum | Complete { completionImmediate , completionDelayed , completionDeferred } | |
typedef enum Error | Error | |
typedef enum Access | Access | |
typedef enum Open | Open | |
typedef enum Attr | Attr | |
typedef enum Complete | Complete | |
typedef enum Mapping | Mapping | |
![]() | ||
static const char * | getExtension (const char *path) | |
static const char * | getFilename (const char *path) | |
static char * | getFilename (const char *path, char *buffer, size_t size=64) | |
static char * | getDirname (const char *path, char *buffer, size_t size=256) | |
static char * | getRealpath (const char *path, char *buffer, size_t size=256) | |
![]() | ||
typedef struct ost::File::_fcb | fcb_t | |
enum | Error { errSuccess = 0 , errNotOpened , errMapFailed , errInitFailed , errOpenDenied , errOpenFailed , errOpenInUse , errReadInterrupted , errReadIncomplete , errReadFailure , errWriteInterrupted , errWriteIncomplete , errWriteFailure , errLockFailure , errExtended } | |
enum | Access { accessReadOnly = O_RDONLY , accessWriteOnly = O_WRONLY , accessReadWrite = O_RDWR } | |
enum | Open { openReadOnly = O_RDONLY , openWriteOnly = O_WRONLY , openReadWrite = O_RDWR , openAppend = O_WRONLY | O_APPEND , openSync = O_RDWR , openTruncate = O_RDWR | O_TRUNC } | |
enum | Attr { attrInvalid = 0 , attrPrivate = 0400 | 0200 , attrGroup = attrPrivate | 0040 | 0020 , attrPublic = attrGroup | 0004 | 0002 } | |
enum | Mapping { mappedRead = accessReadOnly , mappedWrite = accessWriteOnly , mappedReadWrite = accessReadWrite } | |
enum | Complete { completionImmediate , completionDelayed , completionDeferred } | |
typedef enum Error | Error | |
typedef enum Access | Access | |
typedef enum Open | Open | |
typedef enum Attr | Attr | |
typedef enum Complete | Complete | |
typedef enum Mapping | Mapping | |
![]() | ||
RandomFile (const char *name=NULL) | ||
Create an unopened random access file. | ||
RandomFile (const RandomFile &rf) | ||
Default copy constructor. | ||
Error | error (Error errid, char *errstr=NULL) | |
Post an error event. | ||
Error | error (char *err) | |
Post an extended string error message. | ||
void | setError (bool enable) | |
Used to enable or disable throwing of exceptions on errors. | ||
Error | setCompletion (Complete mode) | |
Used to set file completion modes. | ||
void | setTemporary (bool enable) | |
Used to set the temporary attribute for the file. | ||
virtual Attr | initialize (void) | |
This method is used to initialize a newly created file as indicated by the "initial" flag. | ||
void | final (void) | |
Close the file. | ||
![]() | ||
Mutex (const char *name=NULL) | ||
The mutex is always initialized as a recursive entity. | ||
virtual | ~Mutex () | |
Destroying the mutex removes any system resources associated with it. | ||
void | nameMutex (const char *name) | |
Enable setting of mutex name for deadlock debug. | ||
void | enterMutex (void) | |
Entering a Mutex locks the mutex for the current thread. | ||
void | enter (void) | |
Future abi will use enter/leave/test members. | ||
void | leave (void) | |
Future abi will use enter/leave/test members. | ||
bool | test (void) | |
Future abi will use enter/leave/test members. | ||
bool | tryEnterMutex (void) | |
Tries to lock the mutex for the current thread. | ||
void | leaveMutex (void) | |
Leaving a mutex frees that mutex for use by another thread. | ||
![]() | ||
static void | setDebug (bool mode) | |
Enable or disable deadlock debugging. | ||
![]() | ||
static const char * | getExtension (const char *path) | |
static const char * | getFilename (const char *path) | |
static char * | getFilename (const char *path, char *buffer, size_t size=64) | |
static char * | getDirname (const char *path, char *buffer, size_t size=256) | |
static char * | getRealpath (const char *path, char *buffer, size_t size=256) | |
![]() | ||
int | fd | |
Access | access | |
char * | pathname | |
struct { | ||
unsigned count: 16 | ||
bool thrown: 1 | ||
bool initial: 1 | ||
bool immediate: 1 | ||
bool temp: 1 | ||
} | flags | |
![]() | ||
bool __EXPORT | isDir (const char *path) | |
bool __EXPORT | isFile (const char *path) | |
bool __EXPORT | isDevice (const char *path) | |
bool __EXPORT | canAccess (const char *path) | |
bool __EXPORT | canModify (const char *path) | |
time_t __EXPORT | lastModified (const char *path) | |
time_t __EXPORT | lastAccessed (const char *path) | |
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.
This class defines a database I/O file service that can be shared by multiple threads.
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 |
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 | ) |
|
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. |