UCommon
Public Member Functions | Protected Member Functions | Protected Attributes | Friends
ucommon::shell::iobuf Class Reference

Process pipe with I/O buffering. More...

#include <shell.h>

Inheritance diagram for ucommon::shell::iobuf:
Inheritance graph
[legend]
Collaboration diagram for ucommon::shell::iobuf:
Collaboration graph
[legend]

Public Member Functions

void cancel (void)
 Terminate child process.
void close (void)
 Close the i/o buffer.
 iobuf (size_t size=0)
 Construct an i/o buffer.
 iobuf (const char *path, char **argv, pmode_t mode, size_t size=512, char **env=NULL)
 Construct an i/o buffer for a child process.
void open (const char *path, char **argv, pmode_t mode, size_t size=512, char **env=NULL)
 Open the i/o buffer attached to a child process.
 ~iobuf ()
 Destroy i/o buffer.

Protected Member Functions

virtual void _clear (void)
 Method to clear low level i/o error.
virtual int _err (void) const
 Method to get low level i/o error.
virtual size_t _pull (char *address, size_t size)
 Method to pull buffer from physical i/o (read).
virtual size_t _push (const char *address, size_t size)
 Method to push buffer into physical i/o (write).

Protected Attributes

int ioerror

Friends

class shell

Detailed Description

Process pipe with I/O buffering.

This allows the creation and management of a shell pipe with buffered I/O support. This also offers a common class to manage stdio sessions generically in the child process.

Author:
David Sugar <dyfet@gnutelephony.org>

Constructor & Destructor Documentation

ucommon::shell::iobuf::iobuf ( size_t  size = 0)

Construct an i/o buffer.

If a non-zero size is specified, then the object is attached to the process's stdin & stdout. Otherwise an un-opened object is created.

ucommon::shell::iobuf::iobuf ( const char *  path,
char **  argv,
pmode_t  mode,
size_t  size = 512,
char **  env = NULL 
)

Construct an i/o buffer for a child process.

This is used to create a child process directly when the object is made. It essentially is the same as the open() method.

Parameters:
pathof program to execute, if filename uses $PATH.
argvto pass to child process.
modeof pipe, rdonly, wronly, or rdwr.
sizeof buffering, and atomic pipe size if settable.
envthat may be passed to child process.
ucommon::shell::iobuf::~iobuf ( )

Destroy i/o buffer.

This may cancel and block waiting for a child process to terminate.


Member Function Documentation

virtual int ucommon::shell::iobuf::_err ( void  ) const [protected, virtual]

Method to get low level i/o error.

Returns:
error from low level i/o methods.

Implements ucommon::BufferProtocol.

virtual size_t ucommon::shell::iobuf::_pull ( char *  address,
size_t  size 
) [protected, virtual]

Method to pull buffer from physical i/o (read).

The address is passed to this virtual since it is hidden as private.

Parameters:
addressof buffer to pull data into.
sizeof buffer area being pulled..
Returns:
number of read written, 0 on error or end of data.

Implements ucommon::BufferProtocol.

virtual size_t ucommon::shell::iobuf::_push ( const char *  address,
size_t  size 
) [protected, virtual]

Method to push buffer into physical i/o (write).

The address is passed to this virtual since it is hidden as private.

Parameters:
addressof data to push.
sizeof data to push.
Returns:
number of bytes written, 0 on error.

Implements ucommon::BufferProtocol.

void ucommon::shell::iobuf::cancel ( void  )

Terminate child process.

This also waits for the child process to exit and then closes buffers.

Reimplemented from ucommon::shell::pipeio.

void ucommon::shell::iobuf::close ( void  )

Close the i/o buffer.

If attached to a child process it will wait for the child to exit.

void ucommon::shell::iobuf::open ( const char *  path,
char **  argv,
pmode_t  mode,
size_t  size = 512,
char **  env = NULL 
)

Open the i/o buffer attached to a child process.

Parameters:
pathof program to execute, if filename uses $PATH.
argvto pass to child process.
modeof pipe, rdonly, wronly, or rdwr.
sizeof buffering, and atomic pipe size if settable.
envthat may be passed to child process.

The documentation for this class was generated from the following file: