---
name: "redi_basic_pstream"
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_pstream"
---

# redi\_basic\_pstream(3)

Class template for Bidirectional PStreams

## NAME

redi::basic\_pstream - Class template for Bidirectional PStreams

## SYNOPSIS

`#include <pstream.h>`

Inherits basic\_iostream\< 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.  typedef int **fd\_type**\
 Type used for file descriptors.

### Public Member Functions

**basic\_pstream** ()\
 Default constructor, creates an uninitialised stream.  **basic\_pstream** (const std::string &cmd, **pmode** mode=**pstdout**\|**pstdin**)\
 Constructor that initialises the stream by starting a process.  **basic\_pstream** (const std::string &file, const **argv\_type** &argv, **pmode** mode=**pstdout**\|**pstdin**)\
 Constructor that initialises the stream by starting a process.  **basic\_pstream** (const **argv\_type** &argv, **pmode** mode=**pstdout**\|**pstdin**)\
 Constructor that initialises the stream by starting a process.  **~basic\_pstream** ()\
 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.  **basic\_pstream** & **out** ()\
 Set streambuf to read from process' `stdout`.  **basic\_pstream** & **err** ()\
 Set streambuf to read from process' `stderr`.  int **close** ()\
 bool **is\_open** () const\
 Report whether the stream's buffer has been initialised.  const std::string & **command** () const\
 Return the command used to initialise the stream.  **streambuf\_type** \* **rdbuf** () const\
 Return a pointer to the stream buffer.

### 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.  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

typedef **basic\_pstreambuf**\< CharT, std::char\_traits\< CharT \> \> **streambuf\_type**\
 typedef std::basic\_ios\< CharT, std::char\_traits\< CharT \> \> **ios\_type**\
 enum { **bufsz** = 32 }\
 enum { **pbsz** = 2 }\
 enum { **bufsz** = 32 }\
 enum { **pbsz** = 2 }\

### Protected Member Functions

void **do\_open** (const std::string &cmd, **pmode** mode)\
 Start a process.  void **do\_open** (const std::string &file, const **argv\_type** &argv, **pmode** mode)\
 Start a process.

### Protected Attributes

std::string **command\_**\
 The command used to start the process.

## Detailed Description

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

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

Writing to a pstream opened with `pmode` `pstdin` writes to the standard input of the command. Reading from a pstream 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\_pstream\< CharT, Traits \>::basic\_pstream (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\_pstream\< CharT, Traits \>::basic\_pstream (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\_pstream\< CharT, Traits \>::basic\_pstream (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)**

### template\<typename CharT , typename Traits = std::char\_traits\<CharT\>\> redi::basic\_pstream\< CharT, Traits \>::~basic\_pstream ()` [inline]`

Destructor. Closes the stream and waits for the child to exit.

## Member Function Documentation

### int redi::pstream\_common\< C, T \>::close` [inline]`, ` [inherited]`

Close the pipe, returning the program's exit status, as [pclose(3)](/pclose/3.md) does.

Calls rdbuf-\>**close()** and sets `failbit` on error. Returns process's exit status, as [pclose(3)](/pclose/3.md) does.

### const std::string & redi::pstream\_common\< C, T \>::command` [inline]`, ` [inherited]`

Return the command used to initialise the stream.

**Returns**

a string containing the command used to initialise the stream.

### void redi::pstream\_common\< C, T \>::do\_open (const std::string & cmd, pmode mode)` [inline]`, ` [protected]`, ` [inherited]`

Start a process. Calls **rdbuf()**-\>open( *command* , *mode* ) and sets `failbit` on error.

**Parameters**

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

**See also**

**basic\_pstreambuf::open(const std::string&, pmode)**

### void redi::pstream\_common\< C, T \>::do\_open (const std::string & file, const argv\_type & argv, pmode mode)` [inline]`, ` [protected]`, ` [inherited]`

Start a process. Calls **rdbuf()**-\>open( *file*, *argv*, *mode* ) and sets `failbit` on error.

**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**

**basic\_pstreambuf::open(const std::string&, const argv\_type&, pmode)**

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

Set streambuf to read from process' `stderr`.

**Returns**

`*this`

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

### bool redi::pstream\_common\< C, T \>::is\_open` [inline]`, ` [inherited]`

Report whether the stream's buffer has been initialised.

**Returns**

**rdbuf()**-\>**is\_open()**.

**See also**

**basic\_pstreambuf::is\_open()**

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

Start a process. Calls do\_open( *cnd* , *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\_pstream\< 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\>\> basic\_pstream& redi::basic\_pstream\< CharT, Traits \>::out ()` [inline]`

Set streambuf to read from process' `stdout`.

**Returns**

`*this`

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

### pstream\_common\< C, T \>::streambuf\_type \* redi::pstream\_common\< C, T \>::rdbuf` [inline]`, ` [inherited]`

Return a pointer to the stream buffer.

**Returns**

a pointer to the private stream buffer member.

## Author

Generated automatically by Doxygen for PStreams from the source code.
