#include <FilebufIO.h>
Inheritance diagram for casa::FilebufIO:


Part of API
This class is a specialization of class ByteIO . This class is doing IO on a file in a buffered way to reduce the number of file accesses as much as possible. It is part of the entire IO framework. It can for instance be used to store data in canonical format in a file in an IO-efficient way
The buffer size is dynamic, so any time it can be set as needed.
It is also possible to construct a FilebufIO object from a file descriptor (e.g. for a pipe or socket). The constructor will determine automatically if the file is readable, writable and seekable.
This example shows how FilebufIO can be used with an fd. It uses the fd for a regular file, which could be done in an easier way using class RegularFileIO . However, when using pipes or sockets, this would be the only way.
// Get a file descriptor for the file. int fd = open ("file.name"); // Use that as the source of AipsIO (which will also use CanonicalIO). FilebufIO fio (fd); AipsIO stream (&fio); // Read the data. Int vali; Bool valb; stream >> vali >> valb;
The stdio package was used, but it proved to be very slow on Solaris. After a seek the buffer was refreshed, which increased the number of file accesses enormously. Also the interaction between reads and writes in stdio required speial care.
Definition at line 94 of file FilebufIO.h.
Public Member Functions | |
| FilebufIO () | |
| Default constructor. | |
| FilebufIO (int fd, uInt bufferSize=16384) | |
| Construct from the given file descriptor. | |
| void | attach (int fd, uInt bufferSize=16384) |
| Attach to the given file descriptor. | |
| ~FilebufIO () | |
| The destructor closes the file when it was owned and opened and not closed yet. | |
| virtual void | write (uInt size, const void *buf) |
| Write the number of bytes. | |
| virtual Int | read (uInt size, void *buf, Bool throwException=True) |
Read size bytes from the File. | |
| void | flush () |
| Flush the current buffer. | |
| void | resync () |
| Resync the file (i.e. | |
| virtual Int64 | length () |
| Get the length of the byte stream. | |
| virtual Bool | isReadable () const |
| Is the IO stream readable? | |
| virtual Bool | isWritable () const |
| Is the IO stream writable? | |
| virtual Bool | isSeekable () const |
| Is the IO stream seekable? | |
| virtual String | fileName () const |
| Get the file name of the file attached. | |
| uInt | bufferSize () const |
| Get the buffer size. | |
Protected Member Functions | |
| void | detach (Bool closeFile=False) |
| Detach the FILE. | |
| void | fillRWFlags (int fd) |
| Determine if the file descriptor is readable and/or writable. | |
| void | fillSeekable () |
| Determine if the file is seekable. | |
| virtual Int64 | doSeek (Int64 offset, ByteIO::SeekOption) |
| Reset the position pointer to the given value. | |
| void | setBuffer (uInt bufSize) |
| Set a new buffer size. | |
| void | writeBuffer (Int64 offset, const char *buf, Int size) |
| Write a buffer of given length into the file at given offset. | |
| uInt | readBuffer (Int64 offset, char *buf, uInt size, Bool throwException) |
| Read a buffer of given length from the file at given offset. | |
| void | writeBlock (uInt size, const char *buf) |
| Write a block into the stream at the current offset. | |
| uInt | readBlock (uInt size, char *buf, Bool throwException) |
| Read a block from the stream at the current offset. | |
Private Member Functions | |
| FilebufIO (const FilebufIO &that) | |
| Copy constructor, should not be used. | |
| FilebufIO & | operator= (const FilebufIO &that) |
| Assignment, should not be used. | |
Private Attributes | |
| Bool | itsSeekable |
| Bool | itsReadable |
| Bool | itsWritable |
| int | itsFile |
| uInt | itsBufSize |
| uInt | itsBufLen |
| char * | itsBuffer |
| Int64 | itsBufOffset |
| Int64 | itsOffset |
| Int64 | itsSeekOffset |
| Bool | itsDirty |
| casa::FilebufIO::FilebufIO | ( | ) |
Default constructor.
A stream can be attached using the attach function.
| casa::FilebufIO::FilebufIO | ( | int | fd, | |
| uInt | bufferSize = 16384 | |||
| ) | [explicit] |
Construct from the given file descriptor.
Note that the detach function can be told to close the file descriptor.
| casa::FilebufIO::~FilebufIO | ( | ) |
The destructor closes the file when it was owned and opened and not closed yet.
| casa::FilebufIO::FilebufIO | ( | const FilebufIO & | that | ) | [private] |
Copy constructor, should not be used.
| void casa::FilebufIO::attach | ( | int | fd, | |
| uInt | bufferSize = 16384 | |||
| ) |
Attach to the given file descriptor.
Note that the detach function can be told to close the file descriptor.
| virtual void casa::FilebufIO::write | ( | uInt | size, | |
| const void * | buf | |||
| ) | [virtual] |
Read size bytes from the File.
Returns the number of bytes actually read. Will throw an exception (AipsError) if the requested number of bytes could not be read unless throwException is set to False. Will always throw an exception if the file is not readable or the system call returns an undocumented value.
Implements casa::ByteIO.
| void casa::FilebufIO::flush | ( | ) |
Flush the current buffer.
| void casa::FilebufIO::resync | ( | ) |
Resync the file (i.e.
empty the current buffer).
| virtual Int64 casa::FilebufIO::length | ( | ) | [virtual] |
| virtual Bool casa::FilebufIO::isReadable | ( | ) | const [virtual] |
| virtual Bool casa::FilebufIO::isWritable | ( | ) | const [virtual] |
| virtual Bool casa::FilebufIO::isSeekable | ( | ) | const [virtual] |
| virtual String casa::FilebufIO::fileName | ( | ) | const [virtual] |
Get the file name of the file attached.
| uInt casa::FilebufIO::bufferSize | ( | ) | const [inline] |
Detach the FILE.
Close it when needed.
| void casa::FilebufIO::fillRWFlags | ( | int | fd | ) | [protected] |
Determine if the file descriptor is readable and/or writable.
| void casa::FilebufIO::fillSeekable | ( | ) | [protected] |
Determine if the file is seekable.
| virtual Int64 casa::FilebufIO::doSeek | ( | Int64 | offset, | |
| ByteIO::SeekOption | ||||
| ) | [protected, virtual] |
Reset the position pointer to the given value.
It returns the new position.
Implements casa::ByteIO.
| void casa::FilebufIO::setBuffer | ( | uInt | bufSize | ) | [protected] |
Set a new buffer size.
If a buffer was already existing, flush and delete it.
Write a buffer of given length into the file at given offset.
| uInt casa::FilebufIO::readBuffer | ( | Int64 | offset, | |
| char * | buf, | |||
| uInt | size, | |||
| Bool | throwException | |||
| ) | [protected] |
Read a buffer of given length from the file at given offset.
| void casa::FilebufIO::writeBlock | ( | uInt | size, | |
| const char * | buf | |||
| ) | [protected] |
Write a block into the stream at the current offset.
It is guaranteed that the block fits in a single buffer.
Read a block from the stream at the current offset.
It is guaranteed that the block fits in a single buffer.
Assignment, should not be used.
Bool casa::FilebufIO::itsSeekable [private] |
Definition at line 183 of file FilebufIO.h.
Bool casa::FilebufIO::itsReadable [private] |
Definition at line 184 of file FilebufIO.h.
Bool casa::FilebufIO::itsWritable [private] |
Definition at line 185 of file FilebufIO.h.
int casa::FilebufIO::itsFile [private] |
Definition at line 186 of file FilebufIO.h.
uInt casa::FilebufIO::itsBufSize [private] |
uInt casa::FilebufIO::itsBufLen [private] |
Definition at line 188 of file FilebufIO.h.
char* casa::FilebufIO::itsBuffer [private] |
Definition at line 189 of file FilebufIO.h.
Int64 casa::FilebufIO::itsBufOffset [private] |
Definition at line 190 of file FilebufIO.h.
Int64 casa::FilebufIO::itsOffset [private] |
Definition at line 191 of file FilebufIO.h.
Int64 casa::FilebufIO::itsSeekOffset [private] |
Definition at line 192 of file FilebufIO.h.
Bool casa::FilebufIO::itsDirty [private] |
Definition at line 193 of file FilebufIO.h.
1.5.1