00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _FileDescriptorDevice_incl_
00020 #define _FileDescriptorDevice_incl_
00021
00022 #include <rel/IODevice.h>
00023 #include <rel/SmartPtr.h>
00024
00025 #include <stdio.h>
00026
00027 namespace rel
00028 {
00029
00030 class FileDescriptorDevice : public IODevice
00031 {
00032 public:
00033
00034
00035
00036 FileDescriptorDevice(const SmartPtr<int> &inputFD,
00037 const SmartPtr<int> &outputFD);
00038 virtual ~FileDescriptorDevice();
00039
00040
00041
00042
00043
00044 virtual bool setInputDescriptor(const SmartPtr<int> &inputFD);
00045 virtual bool setOutputDescriptor(const SmartPtr<int> &outputFD);
00046
00047
00048 virtual int getReadDescriptor() const;
00049
00050 virtual bool isDirectAccess() const;
00051 virtual size_type at() const;
00052 virtual bool at(size_type offset);
00053
00054 virtual bool atEnd() const;
00055
00056 virtual size_type writeBytes(const char *data, size_type len);
00057 virtual void flush();
00058
00059 virtual size_type readBytes(char *data, size_type maxLen) const;
00060
00061
00062
00063 private:
00064 FileDescriptorDevice(const FileDescriptorDevice &);
00065 FileDescriptorDevice &operator=(const FileDescriptorDevice &);
00066
00067 FILE *in;
00068 FILE *out;
00069
00070 SmartPtr<int> inputFD;
00071 SmartPtr<int> outputFD;
00072
00073 unsigned long inputSize;
00074 };
00075
00081 void fileCloseDestructor(int descriptor);
00082 void fileCloseDestructor(int *descriptor);
00083
00084 }
00085
00086 #endif
00087