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
00034 namespace Conexus
00035 {
00036
00043 class Pipe : public FileDescriptor
00044 {
00045 public:
00046 typedef enum PipeState {
00047 READ=LASTENDPOINTSTATE<<1,
00048 WRITE=LASTENDPOINTSTATE<<2,
00049 LASTPIPESTATE=WRITE,
00050 } PipeState;
00051
00052 typedef boost::shared_ptr<Pipe> pointer;
00053
00054 Pipe( );
00055
00056 static Pipe::pointer create( );
00057
00058 virtual ~Pipe();
00059
00060 virtual void open() throw (open_error);
00061
00062 virtual void close(bool force=false) throw (close_error);
00063
00064 virtual void close_read(bool force=false) throw (close_error);
00065
00066 virtual void close_write(bool force=false) throw (close_error);
00067
00068 virtual ssize_t write(const void* data, size_t size, IOMethod block=BLOCK) throw (write_error);
00069
00070 virtual Data read(size_t s = 0) throw (read_error);
00071
00072 virtual const std::string& object_type() { static std::string s("Conexus::Pipe"); return s; }
00073
00074 protected:
00075 int m_write_fd;
00076 };
00077
00078 }
00079
00080 #endif