Abstraction over a real file. This is what the Virtual Filesystem contains. This class is not intended for general consumption. Please consult a physician before attempting to use this class. More...
#include <Filecache.h>

Public Types | |
| enum | Creation_States { ACE_READING = 1, ACE_WRITING = 2 } |
| enum | Error_Conditions { ACE_SUCCESS = 0, ACE_ACCESS_FAILED, ACE_OPEN_FAILED, ACE_COPY_FAILED, ACE_STAT_FAILED, ACE_MEMMAP_FAILED, ACE_WRITE_FAILED } |
Public Member Functions | |
| ACE_Filecache_Object (const ACE_TCHAR *filename, ACE_SYNCH_RW_MUTEX &lock, LPSECURITY_ATTRIBUTES sa=0, int mapit=1) | |
| Creates a file for reading. | |
| ACE_Filecache_Object (const ACE_TCHAR *filename, ACE_OFF_T size, ACE_SYNCH_RW_MUTEX &lock, LPSECURITY_ATTRIBUTES sa=0) | |
| Creates a file for writing. | |
| ~ACE_Filecache_Object (void) | |
| Only if reference count is zero should this be called. | |
| int | acquire (void) |
| Increment the reference_count_. | |
| int | release (void) |
| Decrement the reference_count_. | |
| int | error (void) const |
| int | error (int error_value, const ACE_TCHAR *s=ACE_TEXT("ACE_Filecache_Object")) |
| const ACE_TCHAR * | filename (void) const |
| filename_ accessor | |
| ACE_HANDLE | handle (void) const |
| handle_ accessor. | |
| void * | address (void) const |
| Base memory address for memory mapped file. | |
| ACE_OFF_T | size (void) const |
| size_ accessor. | |
| int | update (void) const |
| True if file on disk is newer than cached file. | |
Protected Member Functions | |
| ACE_Filecache_Object (void) | |
| Prevent from being called. | |
| void | init (void) |
| Common initialization code,. | |
Private Member Functions | |
| int | error_i (int error_value, const ACE_TCHAR *s=ACE_TEXT("ACE_Filecache_Object")) |
| Internal error logging method, no locking. | |
Private Attributes | |
| ACE_TCHAR * | tempname_ |
| ACE_TCHAR | filename_ [MAXPATHLEN+1] |
| ACE_Mem_Map | mmap_ |
| Holds the memory mapped version of the temporary file. | |
| ACE_HANDLE | handle_ |
| The descriptor to the temporary file. | |
| ACE_stat | stat_ |
| Used to compare against the real file to test if an update is needed. | |
| ACE_OFF_T | size_ |
| int | action_ |
| Status indicators. | |
| int | error_ |
| int | stale_ |
| If set to 1, means the object is flagged for removal. | |
| LPSECURITY_ATTRIBUTES | sa_ |
| Security attribute object. | |
| ACE_SYNCH_RW_MUTEX | junklock_ |
| The default initializer. | |
| ACE_SYNCH_RW_MUTEX & | lock_ |
| Provides a bookkeeping mechanism for users of this object. | |
Friends | |
| class | ACE_Filecache |
Abstraction over a real file. This is what the Virtual Filesystem contains. This class is not intended for general consumption. Please consult a physician before attempting to use this class.
Definition at line 242 of file Filecache.h.
Definition at line 302 of file Filecache.h.
{
ACE_READING = 1,
ACE_WRITING = 2
};
| ACE_SUCCESS | |
| ACE_ACCESS_FAILED | |
| ACE_OPEN_FAILED | |
| ACE_COPY_FAILED | |
| ACE_STAT_FAILED | |
| ACE_MEMMAP_FAILED | |
| ACE_WRITE_FAILED |
Definition at line 308 of file Filecache.h.
{
ACE_SUCCESS = 0,
ACE_ACCESS_FAILED,
ACE_OPEN_FAILED,
ACE_COPY_FAILED,
ACE_STAT_FAILED,
ACE_MEMMAP_FAILED,
ACE_WRITE_FAILED
};
| ACE_Filecache_Object::ACE_Filecache_Object | ( | const ACE_TCHAR * | filename, | |
| ACE_SYNCH_RW_MUTEX & | lock, | |||
| LPSECURITY_ATTRIBUTES | sa = 0, |
|||
| int | mapit = 1 | |||
| ) |
Creates a file for reading.
Definition at line 490 of file Filecache.cpp.
: tempname_ (0), mmap_ (), handle_ (0), // stat_ (), size_ (0), action_ (0), error_ (0), stale_ (0), sa_ (sa), junklock_ (), lock_ (lock) { this->init (); // ASSERT strlen(filename) < sizeof (this->filename_) ACE_OS::strcpy (this->filename_, filename); this->action_ = ACE_Filecache_Object::ACE_READING; // place ourselves into the READING state // Can we access the file? if (ACE_OS::access (this->filename_, R_OK) == -1) { this->error_i (ACE_Filecache_Object::ACE_ACCESS_FAILED); return; } // Can we stat the file? if (ACE_OS::stat (this->filename_, &this->stat_) == -1) { this->error_i (ACE_Filecache_Object::ACE_STAT_FAILED); return; } this->size_ = ACE_Utils::truncate_cast<ACE_OFF_T> (this->stat_.st_size); this->tempname_ = this->filename_; // Can we open the file? this->handle_ = ACE_OS::open (this->tempname_, READ_FLAGS, R_MASK, this->sa_); if (this->handle_ == ACE_INVALID_HANDLE) { this->error_i (ACE_Filecache_Object::ACE_OPEN_FAILED, ACE_TEXT ("ACE_Filecache_Object::ctor: open")); return; } if (mapit) { // Can we map the file? if (this->mmap_.map (this->handle_, static_cast<size_t> (-1), PROT_READ, ACE_MAP_PRIVATE, 0, 0, this->sa_) != 0) { this->error_i (ACE_Filecache_Object::ACE_MEMMAP_FAILED, ACE_TEXT ("ACE_Filecache_Object::ctor: map")); ACE_OS::close (this->handle_); this->handle_ = ACE_INVALID_HANDLE; return; } } // Ok, finished! this->action_ = ACE_Filecache_Object::ACE_READING; }
| ACE_Filecache_Object::ACE_Filecache_Object | ( | const ACE_TCHAR * | filename, | |
| ACE_OFF_T | size, | |||
| ACE_SYNCH_RW_MUTEX & | lock, | |||
| LPSECURITY_ATTRIBUTES | sa = 0 | |||
| ) |
Creates a file for writing.
Definition at line 558 of file Filecache.cpp.
: stale_ (0), sa_ (sa), lock_ (lock) { this->init (); this->size_ = size; ACE_OS::strcpy (this->filename_, filename); this->action_ = ACE_Filecache_Object::ACE_WRITING; // Can we access the file? if (ACE_OS::access (this->filename_, R_OK|W_OK) == -1 // Does it exist? && ACE_OS::access (this->filename_, F_OK) != -1) { // File exists, but we cannot access it. this->error_i (ACE_Filecache_Object::ACE_ACCESS_FAILED); return; } this->tempname_ = this->filename_; // Can we open the file? this->handle_ = ACE_OS::open (this->tempname_, WRITE_FLAGS, W_MASK, this->sa_); if (this->handle_ == ACE_INVALID_HANDLE) { this->error_i (ACE_Filecache_Object::ACE_OPEN_FAILED, ACE_TEXT ("ACE_Filecache_Object::acquire: open")); return; } // Can we write? if (ACE_OS::pwrite (this->handle_, "", 1, this->size_ - 1) != 1) { this->error_i (ACE_Filecache_Object::ACE_WRITE_FAILED, ACE_TEXT ("ACE_Filecache_Object::acquire: write")); ACE_OS::close (this->handle_); return; } // Can we map? if (this->mmap_.map (this->handle_, this->size_, PROT_RDWR, MAP_SHARED, 0, 0, this->sa_) != 0) { this->error_i (ACE_Filecache_Object::ACE_MEMMAP_FAILED, ACE_TEXT ("ACE_Filecache_Object::acquire: map")); ACE_OS::close (this->handle_); } // Ok, done! }
| ACE_Filecache_Object::~ACE_Filecache_Object | ( | void | ) |
Only if reference count is zero should this be called.
Definition at line 614 of file Filecache.cpp.
{
if (this->error_ == ACE_SUCCESS)
{
this->mmap_.unmap ();
ACE_OS::close (this->handle_);
this->handle_ = ACE_INVALID_HANDLE;
}
this->lock_.release ();
}
| ACE_Filecache_Object::ACE_Filecache_Object | ( | void | ) | [protected] |
| int ACE_Filecache_Object::acquire | ( | void | ) |
Increment the reference_count_.
Definition at line 627 of file Filecache.cpp.
{
return this->lock_.tryacquire_read ();
}
| void * ACE_Filecache_Object::address | ( | void | ) | const |
Base memory address for memory mapped file.
Definition at line 725 of file Filecache.cpp.
| int ACE_Filecache_Object::error | ( | int | error_value, | |
| const ACE_TCHAR * | s = ACE_TEXT("ACE_Filecache_Object") | |||
| ) |
| int ACE_Filecache_Object::error | ( | void | ) | const |
Definition at line 688 of file Filecache.cpp.
{
// The existence of the object means a read lock is being held.
return this->error_;
}
| int ACE_Filecache_Object::error_i | ( | int | error_value, | |
| const ACE_TCHAR * | s = ACE_TEXT ("ACE_Filecache_Object") | |||
| ) | [private] |
| const ACE_TCHAR * ACE_Filecache_Object::filename | ( | void | ) | const |
filename_ accessor
Definition at line 704 of file Filecache.cpp.
{
// The existence of the object means a read lock is being held.
return this->filename_;
}
| ACE_HANDLE ACE_Filecache_Object::handle | ( | void | ) | const |
handle_ accessor.
Definition at line 718 of file Filecache.cpp.
{
// The existence of the object means a read lock is being held.
return this->handle_;
}
| void ACE_Filecache_Object::init | ( | void | ) | [protected] |
Common initialization code,.
Definition at line 463 of file Filecache.cpp.
| int ACE_Filecache_Object::release | ( | void | ) |
Decrement the reference_count_.
Definition at line 633 of file Filecache.cpp.
{
if (this->action_ == ACE_WRITING)
{
// We are safe since only one thread has a writable Filecache_Object
#if 0
ACE_HANDLE original = ACE_OS::open (this->filename_, WRITE_FLAGS, W_MASK,
this->sa_);
if (original == ACE_INVALID_HANDLE)
this->error_ = ACE_Filecache_Object::ACE_OPEN_FAILED;
else if (ACE_OS::write (original, this->mmap_.addr (),
this->size_) == -1)
{
this->error_ = ACE_Filecache_Object::ACE_WRITE_FAILED;
ACE_OS::close (original);
ACE_OS::unlink (this->filename_);
}
else if (ACE_OS::stat (this->filename_, &this->stat_) == -1)
this->error_ = ACE_Filecache_Object::ACE_STAT_FAILED;
#endif
this->mmap_.unmap ();
ACE_OS::close (this->handle_);
this->handle_ = ACE_INVALID_HANDLE;
#if 0
// Leave the file in an acquirable state.
this->handle_ = ACE_OS::open (this->tempname_, READ_FLAGS, R_MASK);
if (this->handle_ == ACE_INVALID_HANDLE)
{
this->error_i (ACE_Filecache_Object::ACE_OPEN_FAILED,
"ACE_Filecache_Object::acquire: open");
}
else if (this->mmap_.map (this->handle_, -1,
PROT_READ,
ACE_MAP_PRIVATE,
0,
0,
this->sa_) != 0)
{
this->error_i (ACE_Filecache_Object::ACE_MEMMAP_FAILED,
"ACE_Filecache_Object::acquire: map");
ACE_OS::close (this->handle_);
this->handle_ = ACE_INVALID_HANDLE;
}
this->action_ = ACE_Filecache_Object::ACE_READING;
#endif
}
return this->lock_.release ();
}
| ACE_OFF_T ACE_Filecache_Object::size | ( | void | ) | const |
size_ accessor.
Definition at line 711 of file Filecache.cpp.
{
// The existence of the object means a read lock is being held.
return this->size_;
}
| int ACE_Filecache_Object::update | ( | void | ) | const |
True if file on disk is newer than cached file.
Definition at line 732 of file Filecache.cpp.
{
// The existence of the object means a read lock is being held.
int result;
ACE_stat statbuf;
if (ACE_OS::stat (this->filename_, &statbuf) == -1)
result = 1;
else
result = ACE_OS::difftime (this->stat_.st_mtime, statbuf.st_mtime) < 0;
return result;
}
friend class ACE_Filecache [friend] |
Definition at line 245 of file Filecache.h.
int ACE_Filecache_Object::action_ [private] |
Status indicators.
Definition at line 336 of file Filecache.h.
int ACE_Filecache_Object::error_ [private] |
Definition at line 337 of file Filecache.h.
ACE_TCHAR ACE_Filecache_Object::filename_[MAXPATHLEN+1] [private] |
Definition at line 323 of file Filecache.h.
ACE_HANDLE ACE_Filecache_Object::handle_ [private] |
The descriptor to the temporary file.
Definition at line 329 of file Filecache.h.
ACE_SYNCH_RW_MUTEX ACE_Filecache_Object::junklock_ [private] |
The default initializer.
Definition at line 346 of file Filecache.h.
ACE_SYNCH_RW_MUTEX& ACE_Filecache_Object::lock_ [private] |
Provides a bookkeeping mechanism for users of this object.
Definition at line 349 of file Filecache.h.
ACE_Mem_Map ACE_Filecache_Object::mmap_ [private] |
Holds the memory mapped version of the temporary file.
Definition at line 326 of file Filecache.h.
LPSECURITY_ATTRIBUTES ACE_Filecache_Object::sa_ [private] |
Security attribute object.
Definition at line 343 of file Filecache.h.
ACE_OFF_T ACE_Filecache_Object::size_ [private] |
Definition at line 333 of file Filecache.h.
int ACE_Filecache_Object::stale_ [private] |
If set to 1, means the object is flagged for removal.
Definition at line 340 of file Filecache.h.
ACE_stat ACE_Filecache_Object::stat_ [private] |
Used to compare against the real file to test if an update is needed.
Definition at line 332 of file Filecache.h.
ACE_TCHAR* ACE_Filecache_Object::tempname_ [private] |
The temporary file name and the real file name. The real file is copied into the temporary file for safety reasons.
Definition at line 322 of file Filecache.h.
1.7.0