fio_File Class Reference
[Classes for large file i/o, relative file, and DataBase]

#include <fio_File.h>

Inheritance diagram for fio_File:

Inheritance graph
[legend]
Collaboration diagram for fio_File:

Collaboration graph
[legend]

List of all members.


Detailed Description

Basic (super) class for large file IO.

It supports 64 bit seek, but it does not support reading or writing blocks larger than 2GiB!

Definition at line 29 of file fio_File.h.


Public Member Functions

 fio_File (bool a_readOnly, const ivd_FileID_t a_fileID, const cmn_Path a_path, const string a_fileName)
 Instantiate fio_File class with unique file ID and file name.
virtual ~fio_File ()
string & GetFileName () const
ivd_FileID_t GetFileID () const
ivd_FileRetSize_t PosWrite (ivd_FilePosition_t a_position, const void *a_buffer_p, ivd_FileBufSize_t a_size) const
 over write method to add a mutex
ivd_FileRetSize_t PosRead (ivd_FilePosition_t a_position, void *a_buffer_p, ivd_FileBufSize_t a_size)
 over write method to add a mutex
const cmn_PathGetPath ()

Public Attributes

 log_CLASSID_m
 Macro for class name member.

Private Attributes

const ivd_FileID_t m_fileID
 File ID is used by inheritor classes, specially for transaction handle.
const cmn_Path m_path
const string m_fileName
cmn_Mutex m_file_x
 atomic access to file psition and read or write

Constructor & Destructor Documentation

fio_File::fio_File ( bool  a_readOnly,
const ivd_FileID_t  a_fileID,
const cmn_Path  a_path,
const string  a_fileName 
)

Instantiate fio_File class with unique file ID and file name.

If you don't specify path the current working directory is used.

See also:
m_fileID

Definition at line 47 of file fio_File.cpp.

References fom_FILE_NO_SHARE_WRITE, fom_OPEN_ALWAYS, fom_READ, fom_READWRITE, and cmn_File::OpenF().

00051             : cmn_File(a_path + a_fileName),
00052               m_fileID(a_fileID),
00053               m_path(a_path),
00054               m_fileName(a_fileName)
00055 //              m_pathAndFile(m_path + m_fileName)
00056 {
00057     UInt32_t mode = 0;
00058     if (a_readOnly) {
00059         mode = fom_READ;
00060     }
00061     else {
00062         mode = fom_READWRITE | fom_OPEN_ALWAYS | fom_FILE_NO_SHARE_WRITE;
00063     }
00064     OpenF(mode);
00065 }

Here is the call graph for this function:

fio_File::~fio_File (  )  [virtual]

Definition at line 82 of file fio_File.cpp.

00082                      { 
00083 //  CloseF();
00084 }


Member Function Documentation

string& fio_File::GetFileName (  )  const [inline]

ivd_FileID_t fio_File::GetFileID ( void   )  const [inline]

ivd_FileRetSize_t fio_File::PosWrite ( ivd_FilePosition_t  a_position,
const void *  a_buffer_p,
ivd_FileBufSize_t  a_size 
) const

over write method to add a mutex

Definition at line 103 of file fio_File.cpp.

References ivd_BaseException::GetFriendly(), ie_FATAL_ERROR, m_file_x, m_fileName, m_path, cmn_File::SeekF(), and cmn_File::WriteF().

Referenced by fio_CirFileTrans::fio_CirFileTrans(), fio_JourHandle::JourFlush(), fio_JourHandle::JourWrite(), fio_RelFile::PosWrite(), fio_RelFile::WriteHeader(), fio_PermJourInfo_t::WriteInfo(), and fio_RelFile::WriteListOfUnusedVector().

00105                                                 {
00106 
00107     cmn_MutexLock l(m_file_x);
00108 
00109     ivd_FileBufSize_t ret;
00110     try {
00111         SeekF(a_position);     
00112         ret = WriteF(a_buffer_p, a_size);
00113         if (ret < a_size) {
00114             ostringstream sstr;
00115             sstr << "Write to " << (m_path + m_fileName) << ", size " << a_size <<
00116                 ", but write only " << ret;
00117             throw ivd_SysError(ENOSPC, sstr.str(), true);
00118         }
00119     }
00120     catch (ivd_SysError &se) {
00121         throw ivd_InternalError(ie_FATAL_ERROR, se.GetFriendly(), true);
00122     }
00123     return ret;
00124 }

Here is the call graph for this function:

Here is the caller graph for this function:

ivd_FileRetSize_t fio_File::PosRead ( ivd_FilePosition_t  a_position,
void *  a_buffer_p,
ivd_FileBufSize_t  a_size 
)

over write method to add a mutex

Definition at line 128 of file fio_File.cpp.

References m_file_x, cmn_File::ReadF(), and cmn_File::SeekF().

Referenced by fio_CirFileTrans::CheckBlockChain(), fio_CirFileTrans::fio_CirFileTrans(), fio_CirFileTrans::GetRFIdxFromNextBlock(), fio_CirFileTrans::GetRNIdxFromNextBlock(), fio_PermJourInfo_t::Init(), fio_JourHandle::JourRead(), fio_RelFile::ReadListOfUnusedVector(), fio_RelFile::ReadRec(), fsc_nsStream::RemoveLeftVectors(), fsc_RawUpdate::ScanAllCopy(), fsc_RawScan::ScanAllCopy(), fsc_RawUpdate::ScanAllGeneration(), fsc_RawScan::ScanAllGeneration(), fsc_RawUpdate::ScanAllSplit(), fsc_RawScan::ScanAllSplit(), fio_CirFileTrans::SyncRelFileObj(), and fsc_nsStream::Write2DB().

00130                                          {
00131 //    log_FUNC_m(PosRead);
00132     cmn_MutexLock l(m_file_x);
00133     SeekF(a_position);
00134     UInt32_t read = ReadF(a_buffer_p, a_size);
00135     // when read over file size fill buffer with zeroes
00136     if (read < a_size) {
00137         //log_DBG_m(dbg_DETAIL, "Read data over file " << m_fileID 
00138         //              << ", position " << a_position << endl <<
00139         //    cmn_HexDump(a_buffer_p, a_size, a_size, false) );
00140         memset((char*)a_buffer_p + read, 0, a_size - read);
00141         return a_size;
00142     }
00143     return read;
00144 }

Here is the call graph for this function:

Here is the caller graph for this function:

const cmn_Path& fio_File::GetPath (  )  [inline]

Definition at line 91 of file fio_File.h.

00091 { return m_path;};


Member Data Documentation

File ID is used by inheritor classes, specially for transaction handle.

It must be unique in the scope of DataBase. If you use class just for a file, it doesn't matter what value m_fileID has.

See also:
ivd_Transaction

Definition at line 62 of file fio_File.h.

const cmn_Path fio_File::m_path [private]

Definition at line 63 of file fio_File.h.

Referenced by PosWrite().

const string fio_File::m_fileName [private]

Definition at line 64 of file fio_File.h.

Referenced by PosWrite().

cmn_Mutex fio_File::m_file_x [mutable, private]

atomic access to file psition and read or write

Definition at line 68 of file fio_File.h.

Referenced by PosRead(), and PosWrite().

Macro for class name member.

Reimplemented from cmn_File.

Reimplemented in fio_CirFileTrans, fio_JourFile, fio_PermDBinfoMgr, fio_RelFile, fio_RelFileTrans, and fio_VarLenRFT.

Definition at line 72 of file fio_File.h.


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:15:41 2012 for OPENARCHIVE by  doxygen 1.5.6