00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CONEXUSPIPE_H
00020 #define CONEXUSPIPE_H
00021
00022 #include <conexus/filedescriptor.h>
00023
00028 namespace Conexus
00029 {
00030
00037 class Pipe : public FileDescriptor
00038 {
00039 public:
00040 typedef enum PipeState {
00041 READ=LASTENDPOINTSTATE<<1,
00042 WRITE=LASTENDPOINTSTATE<<2,
00043 LASTPIPESTATE=WRITE,
00044 } PipeState;
00045
00046 typedef boost::shared_ptr<Pipe> pointer;
00047
00048 Pipe();
00049
00050 static Pipe::pointer create();
00051
00052 virtual ~Pipe();
00053
00054 virtual void open() throw (open_error);
00055
00056 virtual void close(bool force=false) throw (close_error);
00057
00058 virtual void close_read(bool force=false) throw (close_error);
00059
00060 virtual void close_write(bool force=false) throw (close_error);
00061
00062 virtual ssize_t write(const void* data, size_t size, IOMETHOD block=BLOCK) throw (write_error);
00063
00064 virtual Data read(size_t s = 0) throw (read_error);
00065
00066 virtual const std::string& object_type() { static std::string s("Conexus::Pipe"); return s; }
00067
00068 protected:
00069 int m_write_fd;
00070 };
00071
00072 }
00073
00074 #endif