TwiceAsNice
2019-02-18
|
Class template for stream buffer. More...
#include <PStream.h>
Public Types | |
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 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. More... | |
typedef std::vector< std::string > | argv_type |
Type used to hold the arguments for a command. More... | |
typedef int | fd_type |
Type used for file descriptors. More... | |
typedef std::ios_base::openmode | pmode |
Type used to specify how to connect to the process. More... | |
typedef std::vector< std::string > | argv_type |
Type used to hold the arguments for a command. More... | |
typedef int | fd_type |
Type used for file descriptors. More... | |
Public Member Functions | |
basic_pstreambuf () | |
Default constructor. More... | |
basic_pstreambuf (const std::string &command, pmode mode) | |
Constructor that initialises the buffer with command. More... | |
basic_pstreambuf (const std::string &file, const argv_type &argv, pmode mode) | |
Constructor that initialises the buffer with file and argv. More... | |
~basic_pstreambuf () | |
Destructor. More... | |
basic_pstreambuf * | open (const std::string &command, pmode mode) |
Initialise the stream buffer with command. More... | |
basic_pstreambuf * | open (const std::string &file, const argv_type &argv, pmode mode) |
Initialise the stream buffer with file and argv. More... | |
basic_pstreambuf * | close () |
Close the stream buffer and wait for the process to exit. More... | |
basic_pstreambuf * | kill (int signal=SIGTERM) |
Send a signal to the process. More... | |
void | peof () |
Close the pipe connected to the process' stdin. More... | |
bool | read_err (bool readerr=true) |
Change active input source. More... | |
bool | is_open () const |
Report whether the stream buffer has been initialised. More... | |
bool | exited () |
Report whether the process has exited. More... | |
int | status () const |
Return the exit status of the process. More... | |
int | error () const |
Return the error number for the most recent failed operation. More... | |
basic_pstreambuf () | |
Default constructor. More... | |
basic_pstreambuf (const std::string &command, pmode mode) | |
Constructor that initialises the buffer with command. More... | |
basic_pstreambuf (const std::string &file, const argv_type &argv, pmode mode) | |
Constructor that initialises the buffer with file and argv. More... | |
~basic_pstreambuf () | |
Destructor. More... | |
basic_pstreambuf * | open (const std::string &command, pmode mode) |
Initialise the stream buffer with command. More... | |
basic_pstreambuf * | open (const std::string &file, const argv_type &argv, pmode mode) |
Initialise the stream buffer with file and argv. More... | |
basic_pstreambuf * | close () |
Close the stream buffer and wait for the process to exit. More... | |
basic_pstreambuf * | kill (int signal=SIGTERM) |
Send a signal to the process. More... | |
void | peof () |
Close the pipe connected to the process' stdin. More... | |
bool | read_err (bool readerr=true) |
Change active input source. More... | |
bool | is_open () const |
Report whether the stream buffer has been initialised. More... | |
bool | exited () |
Report whether the process has exited. More... | |
int | status () const |
Return the exit status of the process. More... | |
int | error () const |
Return the error number for the most recent failed operation. More... | |
Protected Types | |
enum | buf_read_src { rsrc_out = 0, rsrc_err = 1, rsrc_out = 0, rsrc_err = 1 } |
Enumerated type to indicate whether stdout or stderr is to be read. More... | |
enum | buf_read_src { rsrc_out = 0, rsrc_err = 1, rsrc_out = 0, rsrc_err = 1 } |
Enumerated type to indicate whether stdout or stderr is to be read. More... | |
![]() | |
enum | { bufsz = 32 } |
enum | { pbsz = 2 } |
enum | { bufsz = 32 } |
enum | { pbsz = 2 } |
Protected Member Functions | |
int_type | overflow (int_type c) |
Transfer characters to the pipe when character buffer overflows. More... | |
int_type | underflow () |
Transfer characters from the pipe when the character buffer is empty. More... | |
int_type | pbackfail (int_type c=traits_type::eof()) |
Make a character available to be returned by the next extraction. More... | |
int | sync () |
Write any buffered characters to the stream. More... | |
std::streamsize | xsputn (const char_type *s, std::streamsize n) |
Insert multiple characters into the pipe. More... | |
std::streamsize | write (const char_type *s, std::streamsize n) |
Insert a sequence of characters into the pipe. More... | |
std::streamsize | read (char_type *s, std::streamsize n) |
Extract a sequence of characters from the pipe. More... | |
std::streamsize | showmanyc () |
Report how many characters can be read from active input without blocking. More... | |
pid_t | fork (pmode mode) |
Initialise pipes and fork process. More... | |
int | wait (bool nohang=false) |
Wait for the child process to exit. More... | |
fd_type & | wpipe () |
Return the file descriptor for the output pipe. More... | |
fd_type & | rpipe () |
Return the file descriptor for the active input pipe. More... | |
fd_type & | rpipe (buf_read_src which) |
Return the file descriptor for the specified input pipe. More... | |
void | create_buffers (pmode mode) |
void | destroy_buffers (pmode mode) |
bool | empty_buffer () |
Writes buffered characters to the process' stdin pipe. More... | |
bool | fill_buffer () |
char_type * | rbuffer () |
Return the active input buffer. More... | |
buf_read_src | switch_read_buffer (buf_read_src) |
int_type | overflow (int_type c) |
Transfer characters to the pipe when character buffer overflows. More... | |
int_type | underflow () |
Transfer characters from the pipe when the character buffer is empty. More... | |
int_type | pbackfail (int_type c=traits_type::eof()) |
Make a character available to be returned by the next extraction. More... | |
int | sync () |
Write any buffered characters to the stream. More... | |
std::streamsize | xsputn (const char_type *s, std::streamsize n) |
Insert multiple characters into the pipe. More... | |
std::streamsize | write (const char_type *s, std::streamsize n) |
Insert a sequence of characters into the pipe. More... | |
std::streamsize | read (char_type *s, std::streamsize n) |
Extract a sequence of characters from the pipe. More... | |
std::streamsize | showmanyc () |
Report how many characters can be read from active input without blocking. More... | |
pid_t | fork (pmode mode) |
Initialise pipes and fork process. More... | |
int | wait (bool nohang=false) |
Wait for the child process to exit. More... | |
fd_type & | wpipe () |
Return the file descriptor for the output pipe. More... | |
fd_type & | rpipe () |
Return the file descriptor for the active input pipe. More... | |
fd_type & | rpipe (buf_read_src which) |
Return the file descriptor for the specified input pipe. More... | |
void | create_buffers (pmode mode) |
void | destroy_buffers (pmode mode) |
bool | empty_buffer () |
Writes buffered characters to the process' stdin pipe. More... | |
bool | fill_buffer () |
char_type * | rbuffer () |
Return the active input buffer. More... | |
buf_read_src | switch_read_buffer (buf_read_src) |
Private Member Functions | |
basic_pstreambuf (const basic_pstreambuf &) | |
basic_pstreambuf & | operator= (const basic_pstreambuf &) |
void | init_rbuffers () |
Called on construction to initialise the arrays used for reading. More... | |
basic_pstreambuf (const basic_pstreambuf &) | |
basic_pstreambuf & | operator= (const basic_pstreambuf &) |
void | init_rbuffers () |
Private Attributes | |
pid_t | ppid_ |
fd_type | wpipe_ |
fd_type | rpipe_ [2] |
char_type * | wbuffer_ |
char_type * | rbuffer_ [2] |
char_type * | rbufstate_ [3] |
buf_read_src | rsrc_ |
Index into rpipe_[] to indicate active source for read operations. More... | |
int | status_ |
int | error_ |
Related Functions | |
(Note that these are not member functions.) | |
void | close_fd (pstreams::fd_type &fd) |
Helper function to close a file descriptor. More... | |
template<int N> | |
void | close_fd_array (pstreams::fd_type(&fds) [N]) |
Helper function to close an array of file descriptors. More... | |
void | close_fd (pstreams::fd_type &fd) |
Helper function to close a file descriptor. More... | |
template<int N> | |
void | close_fd_array (pstreams::fd_type(&fds) [N]) |
Helper function to close an array of file descriptors. More... | |
Additional Inherited Members | |
![]() | |
static const pmode | pstdin = std::ios_base::out |
Write to stdin. More... | |
static const pmode | pstdout = std::ios_base::in |
Read from stdout. More... | |
static const pmode | pstderr = std::ios_base::app |
Read from stderr. More... | |
Class template for stream buffer.
Provides underlying streambuf functionality for the PStreams classes.
typedef CharT Nice::basic_pstreambuf< CharT, Traits >::char_type |
typedef CharT Nice::basic_pstreambuf< CharT, Traits >::char_type |
typedef fd_type Nice::basic_pstreambuf< CharT, Traits >::fd_t |
typedef fd_type Nice::basic_pstreambuf< CharT, Traits >::fd_t |
typedef traits_type::int_type Nice::basic_pstreambuf< CharT, Traits >::int_type |
typedef traits_type::int_type Nice::basic_pstreambuf< CharT, Traits >::int_type |
typedef traits_type::off_type Nice::basic_pstreambuf< CharT, Traits >::off_type |
typedef traits_type::off_type Nice::basic_pstreambuf< CharT, Traits >::off_type |
typedef traits_type::pos_type Nice::basic_pstreambuf< CharT, Traits >::pos_type |
typedef traits_type::pos_type Nice::basic_pstreambuf< CharT, Traits >::pos_type |
typedef Traits Nice::basic_pstreambuf< CharT, Traits >::traits_type |
typedef Traits Nice::basic_pstreambuf< CharT, Traits >::traits_type |
|
protected |
|
protected |
|
inline |
Default constructor.
Creates an uninitialised stream buffer.
|
inline |
|
inline |
Constructor that initialises the buffer with file and argv.
Initialises the stream buffer by calling open() with the supplied arguments.
file | a string containing the name of a program to execute. |
argv | a vector of argument strings passsed to the new program. |
mode | the I/O mode to use when opening the pipe. |
|
inline |
|
private |
Nice::basic_pstreambuf< CharT, Traits >::basic_pstreambuf | ( | ) |
Default constructor.
Nice::basic_pstreambuf< CharT, Traits >::basic_pstreambuf | ( | const std::string & | command, |
pmode | mode | ||
) |
Constructor that initialises the buffer with command.
Nice::basic_pstreambuf< CharT, Traits >::basic_pstreambuf | ( | const std::string & | file, |
const argv_type & | argv, | ||
pmode | mode | ||
) |
Constructor that initialises the buffer with file and argv.
Nice::basic_pstreambuf< CharT, Traits >::~basic_pstreambuf | ( | ) |
Destructor.
|
private |
basic_pstreambuf< C, T > * Nice::basic_pstreambuf< C, T >::close | ( | void | ) |
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.
this
on successful close or NULL
if there is no process to close or if an error occurs. basic_pstreambuf* Nice::basic_pstreambuf< CharT, Traits >::close | ( | ) |
Close the stream buffer and wait for the process to exit.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Writes buffered characters to the process' stdin pipe.
|
protected |
Writes buffered characters to the process' stdin pipe.
|
inline |
Return the error number for the most recent failed operation.
int Nice::basic_pstreambuf< CharT, Traits >::error | ( | ) | const |
Return the error number for the most recent failed operation.
bool Nice::basic_pstreambuf< CharT, Traits >::exited | ( | ) |
Report whether the process has exited.
|
inline |
Report whether the process has exited.
|
protected |
|
protected |
|
protected |
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 possile errors for pipe()
or fork()
. See your system's documentation for these error codes.
mode | an OR of pmodes specifying which of the child's standard streams to connect to. |
|
protected |
Initialise pipes and fork process.
|
inlineprivate |
Called on construction to initialise the arrays used for reading.
|
private |
bool Nice::basic_pstreambuf< CharT, Traits >::is_open | ( | ) | const |
Report whether the stream buffer has been initialised.
|
inline |
Report whether the stream buffer has been initialised.
basic_pstreambuf* Nice::basic_pstreambuf< CharT, Traits >::kill | ( | int | signal = SIGTERM | ) |
Send a signal to the process.
|
inline |
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.
signal | A signal to send to the child process. |
this
or NULL
if kill()
fails. basic_pstreambuf* Nice::basic_pstreambuf< CharT, Traits >::open | ( | const std::string & | command, |
pmode | mode | ||
) |
Initialise the stream buffer with command.
basic_pstreambuf< C, T > * Nice::basic_pstreambuf< C, T >::open | ( | const std::string & | command, |
pmode | mode | ||
) |
Initialise the stream buffer with command.
Starts a new process by passing command to the shell and opens pipes to the process with the specified mode.
Will duplicate the actions of the shell in searching for an executable file if the specified file name does not contain a slash (/) character.
There is no way to tell whether the shell command succeeded, this function will always succeed unless resource limits (such as memory usage, or number of processes or open files) are exceeded. This means is_open() will return true even if command cannot be executed.
command | a string containing a shell command. |
mode | a bitwise OR of one or more of out , in , err . |
this
otherwise. basic_pstreambuf< C, T > * Nice::basic_pstreambuf< C, T >::open | ( | const std::string & | file, |
const argv_type & | argv, | ||
pmode | mode | ||
) |
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. 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. Note that exited() will return true if file cannot be executed, since the child process will have exited.
file | a string containing the pathname of a program to execute. |
argv | a vector of argument strings passed to the new program. |
mode | a bitwise OR of one or more of out , in and err . |
this
otherwise. basic_pstreambuf* Nice::basic_pstreambuf< CharT, Traits >::open | ( | const std::string & | file, |
const argv_type & | argv, | ||
pmode | mode | ||
) |
Initialise the stream buffer with file and argv.
|
private |
|
private |
|
protected |
Transfer characters to the pipe when character buffer overflows.
|
protected |
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.
c | a character to be written to the pipe. |
traits_type::not_eof(c)
if c is equal to traits_type::eof()
. Otherwise returns c if c can be written to the pipe, or traits_type::eof()
if not.
|
protected |
Make a character available to be returned by the next extraction.
|
protected |
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()
.
c | a character to make available for extraction. |
traits_type::eof()
otherwise. void Nice::basic_pstreambuf< CharT, Traits >::peof | ( | ) |
Close the pipe connected to the process' stdin.
|
inline |
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.
|
inlineprotected |
Return the active input buffer.
|
protected |
Return the active input buffer.
|
inlineprotected |
Extract a sequence of characters from the pipe.
Reads up to n characters from the pipe to the buffer s.
This currently only works for fixed width character encodings where each character uses sizeof(char_type)
bytes.
s | character buffer. |
n | buffer length. |
|
protected |
Extract a sequence of characters from the pipe.
bool Nice::basic_pstreambuf< CharT, Traits >::read_err | ( | bool | readerr = true | ) |
Change active input source.
|
inline |
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.
readerr | true to read stderr , false to read stdout . |
true
if the requested stream is open and will be used for subsequent extractions, false
otherwise.
|
protected |
Return the file descriptor for the active input pipe.
|
inlineprotected |
Return the file descriptor for the active input pipe.
|
protected |
Return the file descriptor for the specified input pipe.
|
inlineprotected |
Return the file descriptor for the specified input pipe.
|
protected |
Report how many characters can be read from active input without blocking.
|
protected |
Report how many characters can be read from active input without blocking.
|
inline |
Return the exit status of the process.
int Nice::basic_pstreambuf< CharT, Traits >::status | ( | ) | const |
Return the exit status of the process.
|
protected |
|
protected |
|
protected |
Write any buffered characters to the stream.
|
protected |
Write any buffered characters to the stream.
|
protected |
Transfer characters from the pipe when the character buffer is empty.
|
protected |
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.
traits_type::eof()
in case of failure.
|
protected |
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 wait() returns immediately.
nohang | true to return immediately if the process has not exited. |
|
protected |
Wait for the child process to exit.
|
inlineprotected |
Return the file descriptor for the output pipe.
|
protected |
Return the file descriptor for the output pipe.
|
protected |
Insert a sequence of characters into the pipe.
|
inlineprotected |
Insert a sequence of characters into the pipe.
Writes up to n characters to the pipe from the buffer s.
This currently only works for fixed width character encodings where each character uses sizeof(char_type)
bytes.
s | character buffer. |
n | buffer length. |
|
protected |
Insert multiple characters into the pipe.
s | character buffer. |
n | buffer length. |
|
protected |
Insert multiple characters into the pipe.
|
related |
Helper function to close a file descriptor.
Inspects fd and calls close(3) if it has a non-negative value.
fd | a file descriptor. |
|
related |
Helper function to close a file descriptor.
Inspects fd and calls close(3) if it has a non-negative value.
fd | a file descriptor. |
|
related |
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.
fds | an array of file descriptors. |
|
related |
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.
fds | an array of file descriptors. |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Index into rpipe_[] to indicate active source for read operations.
|
private |
|
private |
|
private |