redi::basic_pstreambuf< CharT, Traits >(3) | Library Functions Manual | redi::basic_pstreambuf< CharT, Traits >(3) |
redi::basic_pstreambuf< CharT, Traits > - Class template for stream buffer.
#include <pstream.h>
Inherits basic_streambuf< CharT, Traits >, and redi::pstreams.
typedef CharT char_type
typedef Traits traits_type
typedef traits_type::int_type int_type
typedef traits_type::off_type off_type
typedef traits_type::pos_type pos_type
typedef fd_type fd_t
typedef std::ios_base::openmode pmode
Type used to specify how to connect to the process. typedef std::vector<
std::string > argv_type
Type used to hold the arguments for a command. typedef int fd_type
Type used for file descriptors.
basic_pstreambuf ()
Default constructor. basic_pstreambuf (const std::string &cmd,
pmode mode)
Constructor that initialises the buffer with cmd.
basic_pstreambuf (const std::string &file, const argv_type
&argv, pmode mode)
Constructor that initialises the buffer with file and argv.
~basic_pstreambuf ()
Destructor. basic_pstreambuf * open (const std::string &cmd,
pmode mode)
Initialise the stream buffer with cmd. basic_pstreambuf *
open (const std::string &file, const argv_type &argv,
pmode mode)
Initialise the stream buffer with file and argv.
basic_pstreambuf * close ()
Close the stream buffer and wait for the process to exit.
basic_pstreambuf * kill (int signal=SIGTERM)
Send a signal to the process. basic_pstreambuf * killpg (int
signal=SIGTERM)
Send a signal to the process' process group. void peof ()
Close the pipe connected to the process' stdin. bool read_err (bool
readerr=true)
Change active input source. bool is_open () const
Report whether the stream buffer has been initialised. bool exited ()
Report whether the process has exited. int status () const
Return the exit status of the process. int error () const
Return the error number (errno) for the most recent failed operation.
static const pmode pstdin = std::ios_base::out
Write to stdin. static const pmode pstdout = std::ios_base::in
Read from stdout. static const pmode pstderr =
std::ios_base::app
Read from stderr. static const pmode newpg =
std::ios_base::trunc
Create a new process group for the child process.
enum buf_read_src { rsrc_out = 0, rsrc_err =
1 } Enumerated type to indicate whether stdout or stderr is to be read.
"
enum { bufsz = 32 }
enum { pbsz = 2 }
int_type overflow (int_type c)
Transfer characters to the pipe when character buffer overflows. int_type
underflow ()
Transfer characters from the pipe when the character buffer is empty. int_type
pbackfail (int_type c=traits_type::eof())
Make a character available to be returned by the next extraction. int
sync ()
Write any buffered characters to the stream. std::streamsize xsputn
(const char_type *s, std::streamsize n)
Insert multiple characters into the pipe. std::streamsize write (const
char_type *s, std::streamsize n)
Insert a sequence of characters into the pipe. std::streamsize read
(char_type *s, std::streamsize n)
Extract a sequence of characters from the pipe. std::streamsize
showmanyc ()
Report how many characters can be read from active input without blocking.
pid_t fork (pmode mode)
Initialise pipes and fork process. int wait (bool nohang=false)
Wait for the child process to exit. fd_type & wpipe ()
Return the file descriptor for the output pipe. fd_type &
rpipe ()
Return the file descriptor for the active input pipe. fd_type &
rpipe (buf_read_src which)
Return the file descriptor for the specified input pipe. void
create_buffers (pmode mode)
void destroy_buffers (pmode mode)
bool empty_buffer ()
Writes buffered characters to the process' stdin pipe. bool fill_buffer
(bool non_blocking=false)
char_type * rbuffer ()
Return the active input buffer. buf_read_src switch_read_buffer
(buf_read_src)
(Note that these are not member functions.)
void close_fd (pstreams::fd_type &fd)
Helper function to close a file descriptor. template<int N> void
close_fd_array (pstreams::fd_type(&fds)[N])
Helper function to close an array of file descriptors.
class redi::basic_pstreambuf< CharT, Traits >" Class template for stream buffer.
Provides underlying streambuf functionality for the PStreams classes.
Deprecated
Default constructor. Creates an uninitialised stream buffer.
Constructor that initialises the buffer with cmd. Initialises the stream buffer by calling open() with the supplied arguments.
Parameters:
See also:
References redi::basic_pstreambuf< CharT, Traits >::open().
Constructor that initialises the buffer with file and argv. Initialises the stream buffer by calling open() with the supplied arguments.
Parameters:
See also:
References redi::basic_pstreambuf< CharT, Traits >::open().
Destructor. Closes the stream by calling close().
See also:
References redi::basic_pstreambuf< CharT, Traits >::close().
Close the stream buffer and wait for the process to exit. Closes all pipes and calls wait() to wait for the process to finish. If an error occurs the error code will be set to one of the possible errors for waitpid(). See your system's documentation for these errors.
Returns:
References redi::basic_pstreambuf< CharT, Traits >::close_fd(), redi::basic_pstreambuf< CharT, Traits >::close_fd_array(), redi::basic_pstreambuf< CharT, Traits >::error(), redi::basic_pstreambuf< CharT, Traits >::is_open(), redi::pstreams::pstderr, redi::pstreams::pstdin, redi::pstreams::pstdout, redi::basic_pstreambuf< CharT, Traits >::sync(), and redi::basic_pstreambuf< CharT, Traits >::wait().
Referenced by redi::pstream_common< CharT, Traits >::close(), redi::basic_pstreambuf< CharT, Traits >::close_fd(), redi::basic_pstreambuf< CharT, Traits >::fork(), redi::basic_pstreambuf< CharT, Traits >::open(), and redi::basic_pstreambuf< CharT, Traits >::~basic_pstreambuf().
Writes buffered characters to the process' stdin pipe.
Returns:
References redi::basic_pstreambuf< CharT, Traits >::write().
Referenced by redi::basic_pstreambuf< CharT, Traits >::overflow(), redi::basic_pstreambuf< CharT, Traits >::sync(), and redi::basic_pstreambuf< CharT, Traits >::xsputn().
Return the error number (errno) for the most recent failed operation.
Returns:
Referenced by redi::basic_pstreambuf< CharT, Traits >::close().
Report whether the process has exited. This function can call pstreambuf::wait() and so may change the object's state if the child process has already exited.
Returns:
See also:
References redi::basic_pstreambuf< CharT, Traits >::wait().
Referenced by redi::basic_pstreambuf< CharT, Traits >::kill(), and redi::basic_pstreambuf< CharT, Traits >::sync().
Returns:
References redi::basic_pstreambuf< CharT, Traits >::rbuffer(), redi::basic_pstreambuf< CharT, Traits >::read(), and redi::basic_pstreambuf< CharT, Traits >::rpipe().
Referenced by redi::basic_pstreambuf< CharT, Traits >::showmanyc(), and redi::basic_pstreambuf< CharT, Traits >::underflow().
Initialise pipes and fork process. Creates pipes as specified by mode and calls fork() to create a new process. If the fork is successful the parent process stores the child's PID and the opened pipes and the child process replaces its standard streams with the opened pipes.
If an error occurs the error code will be set to one of the possible errors for pipe() or fork(). See your system's documentation for these error codes.
Parameters:
Returns:
References redi::basic_pstreambuf< CharT, Traits >::close(), redi::basic_pstreambuf< CharT, Traits >::close_fd_array(), redi::pstreams::newpg, redi::pstreams::pstderr, redi::pstreams::pstdin, and redi::pstreams::pstdout.
Referenced by redi::basic_pstreambuf< CharT, Traits >::open().
Report whether the stream buffer has been initialised. Unlike pstreambuf::exited(), this function will not call wait() and so will not change the object's state. This means that once a child process is executed successfully this function will continue to return true even after the process exits (until wait() is called.)
Returns:
Referenced by redi::basic_pstreambuf< CharT, Traits >::close(), redi::pstream_common< CharT, Traits >::is_open(), redi::basic_pstreambuf< CharT, Traits >::kill(), redi::basic_pstreambuf< CharT, Traits >::killpg(), redi::basic_pstreambuf< CharT, Traits >::open(), and redi::basic_pstreambuf< CharT, Traits >::wait().
Send a signal to the process. Sends the specified signal to the process. A signal can be used to terminate a child process that would not exit otherwise.
If an error occurs the error code will be set to one of the possible errors for kill(). See your system's documentation for these errors.
Parameters:
Returns:
References redi::basic_pstreambuf< CharT, Traits >::exited(), and redi::basic_pstreambuf< CharT, Traits >::is_open().
Send a signal to the process' process group. Sends the specified signal to the process group of the child process. A signal can be used to terminate a child process that would not exit otherwise, or to kill the process and its own children.
If an error occurs the error code will be set to one of the possible errors for getpgid() or kill(). See your system's documentation for these errors. If the child is in the current process group then NULL will be returned and the error code set to EPERM.
Parameters:
Returns:
References redi::basic_pstreambuf< CharT, Traits >::is_open().
Initialise the stream buffer with cmd. Starts a new process by passing command to the shell (/bin/sh) and opens pipes to the process with the specified mode.
If mode contains pstdout the initial read source will be the child process' stdout, otherwise if mode contains pstderr the initial read source will be the child's stderr.
Will duplicate the actions of the shell in searching for an executable file if the specified file name does not contain a slash (/) character.
Warning:
Parameters:
Returns:
See also:
References redi::basic_pstreambuf< CharT, Traits >::fork(), and redi::basic_pstreambuf< CharT, Traits >::is_open().
Referenced by redi::basic_pstreambuf< CharT, Traits >::basic_pstreambuf(), and redi::pstream_common< CharT, Traits >::do_open().
Initialise the stream buffer with file and argv. Starts a new process by executing file with the arguments in argv and opens pipes to the process with the specified mode.
By convention argv[0] should be the file name of the file being executed.
If mode contains pstdout the initial read source will be the child process' stdout, otherwise if mode contains pstderr the initial read source will be the child's stderr.
Will duplicate the actions of the shell in searching for an executable file if the specified file name does not contain a slash (/) character.
Iff file is successfully executed then is_open() will return true. Otherwise, pstreambuf::error() can be used to obtain the value of errno that was set by execvp(3) in the child process.
The exit status of the new process will be returned by pstreambuf::status() after pstreambuf::exited() returns true.
Parameters:
Returns:
See also:
References redi::basic_pstreambuf< CharT, Traits >::close(), redi::basic_pstreambuf< CharT, Traits >::close_fd_array(), redi::basic_pstreambuf< CharT, Traits >::fork(), redi::basic_pstreambuf< CharT, Traits >::is_open(), redi::basic_pstreambuf< CharT, Traits >::read(), redi::basic_pstreambuf< CharT, Traits >::wait(), and redi::basic_pstreambuf< CharT, Traits >::write().
Transfer characters to the pipe when character buffer overflows. Called when the internal character buffer is not present or is full, to transfer the buffer contents to the pipe.
Parameters:
Returns:
References redi::basic_pstreambuf< CharT, Traits >::empty_buffer().
Make a character available to be returned by the next extraction. Attempts to make c available as the next character to be read by sgetc().
Parameters:
Returns:
Close the pipe connected to the process' stdin. Closes the output pipe, causing the child process to receive the end-of-file indicator on subsequent reads from its stdin stream.
References redi::basic_pstreambuf< CharT, Traits >::close_fd(), redi::pstreams::pstdin, and redi::basic_pstreambuf< CharT, Traits >::sync().
Referenced by redi::basic_opstream< CharT, Traits >::peof().
Return the active input buffer.
Returns:
Referenced by redi::basic_pstreambuf< CharT, Traits >::fill_buffer().
Extract a sequence of characters from the pipe. Reads up to n characters from the pipe to the buffer s.
Parameters:
Returns:
References redi::basic_pstreambuf< CharT, Traits >::rpipe().
Referenced by redi::basic_pstreambuf< CharT, Traits >::fill_buffer(), and redi::basic_pstreambuf< CharT, Traits >::open().
Change active input source. Toggle the stream used for reading. If readerr is true then the process' stderr output will be used for subsequent extractions, if readerr is false the the process' stdout will be used.
Parameters:
Returns:
Return the file descriptor for the active input pipe.
Returns:
Referenced by redi::basic_pstreambuf< CharT, Traits >::fill_buffer(), redi::basic_pstreambuf< CharT, Traits >::read(), and redi::basic_pstreambuf< CharT, Traits >::showmanyc().
Return the file descriptor for the specified input pipe.
Returns:
Return the exit status of the process.
Returns:
See also:
Transfer characters from the pipe when the character buffer is empty. Called when the internal character buffer is is empty, to re-fill it from the pipe.
Returns:
References redi::basic_pstreambuf< CharT, Traits >::fill_buffer().
Wait for the child process to exit. Suspends execution and waits for the associated process to exit, or until a signal is delivered whose action is to terminate the current process or to call a signal handling function. If the process has already exited (i.e. it is a 'zombie' process) then wait() returns immediately. Waiting for the child process causes all its system resources to be freed.
error() will return EINTR if wait() is interrupted by a signal.
Parameters:
Returns:
References redi::basic_pstreambuf< CharT, Traits >::close_fd(), redi::basic_pstreambuf< CharT, Traits >::is_open(), and redi::pstreams::pstdin.
Referenced by redi::basic_pstreambuf< CharT, Traits >::close(), redi::basic_pstreambuf< CharT, Traits >::exited(), and redi::basic_pstreambuf< CharT, Traits >::open().
Return the file descriptor for the output pipe.
Returns:
Referenced by redi::basic_pstreambuf< CharT, Traits >::write().
Insert a sequence of characters into the pipe. Writes up to n characters to the pipe from the buffer s.
Parameters:
Returns:
References redi::basic_pstreambuf< CharT, Traits >::wpipe().
Referenced by redi::basic_pstreambuf< CharT, Traits >::empty_buffer(), and redi::basic_pstreambuf< CharT, Traits >::open().
Insert multiple characters into the pipe.
Parameters:
Returns:
References redi::basic_pstreambuf< CharT, Traits >::empty_buffer().
Helper function to close a file descriptor. Inspects fd and calls close(3) if it has a non-negative value.
Parameters:
References redi::basic_pstreambuf< CharT, Traits >::close().
Referenced by redi::basic_pstreambuf< CharT, Traits >::close(), redi::basic_pstreambuf< CharT, Traits >::close_fd_array(), redi::basic_pstreambuf< CharT, Traits >::peof(), and redi::basic_pstreambuf< CharT, Traits >::wait().
Helper function to close an array of file descriptors. Calls close_fd() on each member of the array. The length of the array is determined automatically by template argument deduction to avoid errors.
Parameters:
References redi::basic_pstreambuf< CharT, Traits >::close_fd().
Referenced by redi::basic_pstreambuf< CharT, Traits >::close(), redi::basic_pstreambuf< CharT, Traits >::fork(), and redi::basic_pstreambuf< CharT, Traits >::open().
Generated automatically by Doxygen for PStreams from the source code.
Sat Jul 21 2018 | PStreams |