LSSTApplications  8.0.0.0+107,8.0.0.1+13,9.1+18,9.2,master-g084aeec0a4,master-g0aced2eed8+6,master-g15627eb03c,master-g28afc54ef9,master-g3391ba5ea0,master-g3d0fb8ae5f,master-g4432ae2e89+36,master-g5c3c32f3ec+17,master-g60f1e072bb+1,master-g6a3ac32d1b,master-g76a88a4307+1,master-g7bce1f4e06+57,master-g8ff4092549+31,master-g98e65bf68e,master-ga6b77976b1+53,master-gae20e2b580+3,master-gb584cd3397+53,master-gc5448b162b+1,master-gc54cf9771d,master-gc69578ece6+1,master-gcbf758c456+22,master-gcec1da163f+63,master-gcf15f11bcc,master-gd167108223,master-gf44c96c709
LSSTDataManagementBasePackage
Public Member Functions | Private Member Functions | Private Attributes | List of all members
lsst::ap::io::SequentialFileWriter Class Reference

A sequential writer for uncompressed files. Uses standard (blocking) IO calls. More...

#include <FileIo.h>

Inheritance diagram for lsst::ap::io::SequentialFileWriter:
lsst::ap::io::SequentialWriter lsst::ap::io::SequentialIoBase

Public Member Functions

 SequentialFileWriter (std::string const &fileName, bool const overwrite=false)
 
virtual ~SequentialFileWriter ()
 
virtual void write (unsigned char const *const buf, std::size_t const len)
 Writes len bytes from buf to the underlying storage device. More...
 
virtual void finish ()
 Moves modified data to the underlying storage device and marks the SequentialWriter as finished. More...
 
- Public Member Functions inherited from lsst::ap::io::SequentialIoBase
 SequentialIoBase ()
 
virtual ~SequentialIoBase ()=0
 
bool finished () const
 Returns true if there are no more bytes available for reading. More...
 
bool failed () const
 Returns true if a read operation failed. More...
 
State getState () const
 Returns the state of the SequentialReader. More...
 

Private Member Functions

void cleanup ()
 
void cleanup (State const state)
 

Private Attributes

int _fd
 

Additional Inherited Members

- Public Types inherited from lsst::ap::io::SequentialIoBase
enum  State { IN_PROGRESS = 0, FINISHED, FAILED }
 
- Protected Attributes inherited from lsst::ap::io::SequentialIoBase
State _state
 

Detailed Description

A sequential writer for uncompressed files. Uses standard (blocking) IO calls.

Definition at line 131 of file FileIo.h.

Constructor & Destructor Documentation

lsst::ap::io::SequentialFileWriter::SequentialFileWriter ( std::string const &  fileName,
bool const  overwrite = false 
)
explicit

Definition at line 147 of file FileIo.cc.

150  :
151  _fd(-1)
152 {
153  int const fd = openFile(
154  fileName,
155  O_WRONLY | O_CREAT | O_APPEND | (overwrite ? O_TRUNC : O_EXCL),
156  S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH
157  );
158  assert(fd != -1);
159  _fd = fd;
160 }
lsst::ap::io::SequentialFileWriter::~SequentialFileWriter ( )
virtual

Definition at line 163 of file FileIo.cc.

Member Function Documentation

void lsst::ap::io::SequentialFileWriter::cleanup ( )
private

Definition at line 166 of file FileIo.cc.

166  {
167  if (_fd != -1) {
168  ::close(_fd);
169  }
170 }
void lsst::ap::io::SequentialFileWriter::cleanup ( State const  state)
inlineprivate

Definition at line 152 of file FileIo.h.

152  {
153  cleanup();
154  _state = state;
155  }
void lsst::ap::io::SequentialFileWriter::finish ( )
virtual

Moves modified data to the underlying storage device and marks the SequentialWriter as finished.

Implements lsst::ap::io::SequentialWriter.

Definition at line 204 of file FileIo.cc.

204  {
205  if (_state != IN_PROGRESS) {
206  throw LSST_EXCEPT(ex::IoError,
207  "finish() called on a finished or failed SequentialFileWriter");
208  }
209 
210  // Flush userland and kernel buffers
211  while (fsync(_fd) != 0) {
212  if (errno != EINTR) {
213  cleanup(FAILED);
214  throw LSST_EXCEPT(ex::IoError,
215  (boost::format("fsync() failed, errno: %1%") % errno).str());
216  }
217  errno = 0;
218  }
219  cleanup(FINISHED);
220 }
#define LSST_EXCEPT(type,...)
Definition: Exception.h:46
void lsst::ap::io::SequentialFileWriter::write ( unsigned char const *const  buf,
std::size_t const  len 
)
virtual

Writes len bytes from buf to the underlying storage device.

Implements lsst::ap::io::SequentialWriter.

Definition at line 173 of file FileIo.cc.

176  {
177  if (len == 0) {
178  return;
179  }
180  if (buf == 0) {
181  throw LSST_EXCEPT(ex::InvalidParameterError,
182  "null pointer to bytes to write");
183  }
184  if (_state != IN_PROGRESS) {
185  throw LSST_EXCEPT(ex::IoError,
186  "write() called on a finished or failed SequentialFileWriter");
187  }
188 
189  unsigned char const * dst = buf;
190  std::size_t nb = len;
191  do {
192  ::ssize_t n = ::write(_fd, dst, nb);
193  if (n < 0) {
194  cleanup(FAILED);
195  throw LSST_EXCEPT(ex::IoError,
196  (boost::format("write() failed, errno: %1%") % errno).str());
197  }
198  dst += n;
199  nb -= n;
200  } while (nb > 0);
201 }
#define LSST_EXCEPT(type,...)
Definition: Exception.h:46
virtual void write(unsigned char const *const buf, std::size_t const len)
Writes len bytes from buf to the underlying storage device.
Definition: FileIo.cc:173

Member Data Documentation

int lsst::ap::io::SequentialFileWriter::_fd
private

Definition at line 149 of file FileIo.h.


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