From cd215f0da23e16c3f1a7200f2b9f67f23c9b4be7 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Fri, 23 Nov 2007 22:58:19 +0000 Subject: Added the Process stream class, this will allow us to do some really cool stuff coming up...it's just like popen only cool and managed, and streamey. --- src/process.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/process.h (limited to 'src/process.h') diff --git a/src/process.h b/src/process.h new file mode 100644 index 0000000..dbf1553 --- /dev/null +++ b/src/process.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2007 Xagasoft, All rights reserved. + * + * This file is part of the libbu++ library and is released under the + * terms of the license contained in the file LICENSE. + */ + +#ifndef BU_PROCESS_H +#define BU_PROCESS_H + +#include +#include + +#include "bu/stream.h" +#include "bu/fstring.h" + +namespace Bu +{ + /** + * Runs a program and attaches streams to it's stdin, stdout, and stderr. + * Reading from a Bu::Process will read from the program's standard output, + * writing to a Bu::Process will write to the program's standard input. + */ + class Process : public Bu::Stream + { + public: + Process( const char *sName, char *const argv[] ); + Process( const char *sName, const char *argv, ...); + virtual ~Process(); + + virtual void close(); + virtual size_t read( void *pBuf, size_t nBytes ); + virtual size_t write( const void *pBuf, size_t nBytes ); + + virtual long tell(); + virtual void seek( long offset ); + virtual void setPos( long pos ); + virtual void setPosEnd( long pos ); + virtual bool isEOS(); + virtual bool isOpen(); + + virtual void flush(); + + virtual bool canRead(); + virtual bool canWrite(); + + virtual bool isReadable(); + virtual bool isWritable(); + virtual bool isSeekable(); + + virtual bool isBlocking(); + virtual void setBlocking( bool bBlocking=true ); + + private: + int iStdIn; + int iStdOut; + int iStdErr; + pid_t iPid; + + void gexec( const char *sName, char *const argv[] ); + }; +} + +#endif -- cgit v1.2.3