---
name: "redi_basic_rpstream"
section: "3"
platform: "linux"
package: "libpstreams-dev"
version: "1.0.3-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/redi_basic_rpstream"
---

# redi\_basic\_rpstream(3)

Class template for Restricted PStreams

## NAME

redi::basic\_rpstream - Class template for Restricted PStreams

## SYNOPSIS

`#include <pstream.h>`

Inherits basic\_ostream\< CharT, std::char\_traits\< CharT \> \>, basic\_istream\< CharT, std::char\_traits\< CharT \> \>, **redi::pstream\_common\< CharT, std::char\_traits\< CharT \> \>**, and **redi::pstreams**.

### Public Types

typedef pbase\_type::pmode **pmode**\
 Type used to specify how to connect to the process.  typedef pbase\_type::argv\_type **argv\_type**\
 Type used to hold the arguments for a command.  typedef int **fd\_type**\
 Type used for file descriptors.

### Public Member Functions

**basic\_rpstream** ()\
 Default constructor, creates an uninitialised stream.  **basic\_rpstream** (const std::string &cmd, **pmode** mode=**pstdout**\|**pstdin**)\
 Constructor that initialises the stream by starting a process.  **basic\_rpstream** (const std::string &file, const **argv\_type** &argv, **pmode** mode=**pstdout**\|**pstdin**)\
 Constructor that initialises the stream by starting a process.  **basic\_rpstream** (const **argv\_type** &argv, **pmode** mode=**pstdout**\|**pstdin**)\
 Constructor that initialises the stream by starting a process.  **~basic\_rpstream** ()\
 Destructor.  void **open** (const std::string &cmd, **pmode** mode=**pstdout**\|**pstdin**)\
 Start a process.  void **open** (const std::string &file, const **argv\_type** &argv, **pmode** mode=**pstdout**\|**pstdin**)\
 Start a process.  istream\_type & **out** ()\
 Obtain a reference to the istream that reads the process' `stdout`.  istream\_type & **err** ()\
 Obtain a reference to the istream that reads the process' `stderr`.

### Static Public Attributes

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.

### Protected Types

enum { **bufsz** = 32 }\
 enum { **pbsz** = 2 }\

## Detailed Description

### template\<typename CharT, typename Traits = std::char\_traits\<CharT\>\>

class redi::basic\_rpstream\< CharT, Traits \>" Class template for Restricted PStreams.

Writing to an rpstream opened with `pmode` `pstdin` writes to the standard input of the command. It is not possible to read directly from an rpstream object, to use an rpstream as in istream you must call either **basic\_rpstream::out()** or **basic\_rpstream::err()**. This is to prevent accidental reads from the wrong input source. If the rpstream was not opened with `pmode` `pstderr` then the class cannot read the process' `stderr`, and **basic\_rpstream::err()** will return an istream that reads from the process' `stdout`, and vice versa. Reading from an rpstream opened with `pmode` `pstdout` and/or `pstderr` reads the command's standard output and/or standard error. Any of the process' `stdin`, `stdout` or `stderr` that is not connected to the pstream (as specified by the `pmode`) will be the same as the process that created the pstream object, unless altered by the command itself.

## Constructor & Destructor Documentation

### template\<typename CharT , typename Traits = std::char\_traits\<CharT\>\> redi::basic\_rpstream\< CharT, Traits \>::basic\_rpstream (const std::string & cmd, pmode mode = pstdout`|`pstdin)` [inline]`, ` [explicit]`

Constructor that initialises the stream by starting a process. Initialises the stream buffer by calling **do\_open()** with the supplied arguments.

**Parameters**

*cmd* a string containing a shell command. \
 *mode* the I/O mode to use when opening the pipe.

**See also**

**do\_open(const std::string&, pmode)**

### template\<typename CharT , typename Traits = std::char\_traits\<CharT\>\> redi::basic\_rpstream\< CharT, Traits \>::basic\_rpstream (const std::string & file, const argv\_type & argv, pmode mode = pstdout`|`pstdin)` [inline]`

Constructor that initialises the stream by starting a process. Initialises the stream buffer by calling **do\_open()** with the supplied arguments.

**Parameters**

*file* a string containing the pathname of a program to execute. \
 *argv* a vector of argument strings passed to the new program. \
 *mode* the I/O mode to use when opening the pipe.

**See also**

**do\_open(const std::string&, const argv\_type&, pmode)**

### template\<typename CharT , typename Traits = std::char\_traits\<CharT\>\> redi::basic\_rpstream\< CharT, Traits \>::basic\_rpstream (const argv\_type & argv, pmode mode = pstdout`|`pstdin)` [inline]`, ` [explicit]`

Constructor that initialises the stream by starting a process. Initialises the stream buffer by calling `do_open(argv[0],argv,mode)`

**Parameters**

*argv* a vector of argument strings passed to the new program. \
 *mode* the I/O mode to use when opening the pipe.

**See also**

**do\_open(const std::string&, const argv\_type&, pmode)**

## Member Function Documentation

### template\<typename CharT , typename Traits = std::char\_traits\<CharT\>\> istream\_type& redi::basic\_rpstream\< CharT, Traits \>::err ()` [inline]`

Obtain a reference to the istream that reads the process' `stderr`.

**Returns**

`*this`

References redi::basic\_pstreambuf\< CharT, Traits \>::read\_err().

### template\<typename CharT , typename Traits = std::char\_traits\<CharT\>\> void redi::basic\_rpstream\< CharT, Traits \>::open (const std::string & cmd, pmode mode = pstdout`|`pstdin)` [inline]`

Start a process. Calls do\_open( *cmd* , *mode* ).

**Parameters**

*cmd* a string containing a shell command. \
 *mode* the I/O mode to use when opening the pipe.

**See also**

**do\_open(const std::string&, pmode)**

References redi::pstream\_common\< CharT, std::char\_traits\< CharT \> \>::do\_open().

### template\<typename CharT , typename Traits = std::char\_traits\<CharT\>\> void redi::basic\_rpstream\< CharT, Traits \>::open (const std::string & file, const argv\_type & argv, pmode mode = pstdout`|`pstdin)` [inline]`

Start a process. Calls do\_open( *file* , *argv* , *mode* ).

**Parameters**

*file* a string containing the pathname of a program to execute. \
 *argv* a vector of argument strings passed to the new program. \
 *mode* the I/O mode to use when opening the pipe.

**See also**

**do\_open(const std::string&, const argv\_type&, pmode)**

References redi::pstream\_common\< CharT, std::char\_traits\< CharT \> \>::do\_open().

### template\<typename CharT , typename Traits = std::char\_traits\<CharT\>\> istream\_type& redi::basic\_rpstream\< CharT, Traits \>::out ()` [inline]`

Obtain a reference to the istream that reads the process' `stdout`.

**Returns**

`*this`

References redi::basic\_pstreambuf\< CharT, Traits \>::read\_err().

## Author

Generated automatically by Doxygen for PStreams from the source code.
