home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
ool.zip
/
OOL
/
source
/
xpipe.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1997-04-05
|
3KB
|
114 lines
#include "XPipe.h"
/*@
@class XPipe
@parent XIO
@type overview
@symbol _
*/
/*@
@class XPipe
@type overview
@symbol _
@remarks XPipe is a class which provides data-communication between related processes.
Therefore you redirect stdin/stdout/stderr to a pipes read- and/or write-handle(s) of the
server and client process. The client must be a client-process (see OS/2-docs for details).<BR>
To do <B>realy</B> client/server data-communication use DDE (class XDDE) or named pipes (XNamedPipeServer, XNamedPipeClient).<P>
Example:<PRE>
ULONG hfSave, hfNew = XPIPE_STDERROR;
//save stderror-handle
XPipe::DuplicateHandle( XPIPE_STDERROR, hfSave);
//create a pipe and open it
XPipe pipe;
pipe.Open();
//set the write-handle from the pipe as stderror so the client will write to it
XPipe::DuplicateHandle( pipe1.GetWriteHandle(), hfNew);
//start the client-process here
XProcess::ExecuteProg(.......);
//close write-handle of the pipe
XPipe::CloseHandle( pipe.GetWriteHandle());
//bring the saved handde from stderror back
XPipe::DuplicateHandle( hfSave, hfNew);
//close stderror
XPipe::CloseHandle(hfSave);
ULONG cbRead;
char buffer[XPIPE_DEFAULTSIZE];
do
{
//read data like a file
cbRead = pipe.Read( achBuf, XPIPE_DEFAULTSIZE);
} while(cbRead);
//close the pipe
pipe.Close();
</PRE>
*/
/*@ XPipe::CloseHandle()
@group open/close
@remarks Close a single handle.
@parameters ULONG handle handle to close.
*/
/*@ XPipe::GetWriteHandle()
@group misc
@remarks Returns the write-handle from a pipe
@returns ULONG writeHandle
*/
/*@ XPipe::GetReadHandle()
@group misc
@remarks Returns the read-handle from a pipe
@returns ULONG readHandle
*/
/*@ XPipe::Open()
@group open/close
@remarks Opens a pipe. Afte it is open you can redirect stdin/stdout/stderr to one of its handles.
@parameters LONG buffersize size of the buffer (default is 4096)
*/
LONG XPipe::Open(const LONG size)
{
return DosCreatePipe(&handle, &handle2, size);
}
/*@ XPipe::DuplicateHandle(const ULONG handleFrom, ULONG & handleTo)
@group misc
@remarks Dupplicate a handle.
*/
ULONG XPipe::DuplicateHandle(const ULONG handleFrom, ULONG & handleTo)
{
return DosDupHandle(handleFrom, &handleTo);
}
/*@ XPipe::Close()
@group open/close
@remarks Close the pipe.
*/
void XPipe::Close()
{
DosClose(handle2);
handle2 = NULLHANDLE;
DosClose(handle);
handle = NULLHANDLE;
}