00001
00002
00003
00004
00005 #ifndef DMLITE_CPP_IO_H
00006 #define DMLITE_CPP_IO_H
00007
00008 #include "dmlite/common/config.h"
00009 #include "base.h"
00010 #include "exceptions.h"
00011 #include "utils/extensible.h"
00012
00013 #include <fcntl.h>
00014 #include <map>
00015 #include <sys/stat.h>
00016 #include <sys/uio.h>
00017
00018 namespace dmlite {
00019
00020
00021 class Location;
00022 class PluginManager;
00023 class StackInstance;
00024
00025
00026 class IOHandler {
00027 public:
00028 enum Whence { kSet = SEEK_SET,
00029 kCur = SEEK_CUR,
00030 kEnd = SEEK_END
00031 };
00032
00033
00034 virtual ~IOHandler();
00035
00036
00037 std::string getImplId(void) const throw() {
00038 return std::string("IOHandler");
00039 }
00040
00041
00042 virtual void close(void) ;
00043
00044
00045 virtual int fileno(void) ;
00046
00047
00048
00049
00050
00051 virtual struct ::stat fstat(void) ;
00052
00053
00054
00055
00056
00057 virtual size_t read(char* buffer, size_t count) ;
00058
00059
00060
00061
00062
00063 virtual size_t write(const char* buffer, size_t count) ;
00064
00065
00066
00067
00068
00069
00070
00071 virtual size_t readv(const struct iovec* vector, size_t count) ;
00072
00073
00074
00075
00076
00077
00078
00079 virtual size_t writev(const struct iovec* vector, size_t count) ;
00080
00081
00082
00083
00084
00085
00086 virtual size_t pread(void* buffer, size_t count, off_t offset) ;
00087
00088
00089
00090
00091
00092
00093 virtual size_t pwrite(const void* buffer, size_t count, off_t offset) ;
00094
00095
00096
00097
00098 virtual void seek(off_t offset, Whence whence) ;
00099
00100
00101 virtual off_t tell(void) ;
00102
00103
00104 virtual void flush(void) ;
00105
00106
00107 virtual bool eof(void) ;
00108 };
00109
00110
00111 class IODriver: public virtual BaseInterface, public virtual BaseFactory {
00112 public:
00113
00114
00115
00116 enum { kInsecure = 010 };
00117
00118
00119 virtual ~IODriver();
00120
00121
00122 virtual std::string getImplId(void) const throw() = 0;
00123
00124
00125
00126
00127
00128
00129 virtual IOHandler* createIOHandler(const std::string& pfn,
00130 int flags,
00131 const Extensible& extras,
00132 mode_t mode = 0660) ;
00133 static IOHandler* createIOHandler(IODriver* factory,
00134 const std::string& pfn,
00135 int flags,
00136 const Extensible& extras,
00137 mode_t mode = 0660) ;
00138
00139
00140
00141
00142 virtual void doneWriting(const Location& loc) ;
00143
00144 protected:
00145 friend class StackInstance;
00146
00147 virtual void setSecurityContext(const SecurityContext* ctx) ;
00148 static void setSecurityContext(IODriver* i,
00149 const SecurityContext* ctx) ;
00150 };
00151
00152
00153 class IODriverFactory: public virtual BaseFactory {
00154 public:
00155
00156 virtual ~IODriverFactory();
00157
00158 protected:
00159 friend class StackInstance;
00160
00161
00162 virtual IODriver* createIODriver(PluginManager* pm) ;
00163 static IODriver* createIODriver(IODriverFactory* factory, PluginManager* pm) ;
00164 };
00165
00166 };
00167
00168 #endif // DMLITE_CPP_IO_H