---
name: "redi_basic_opstream"
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_opstream"
---

# redi\_basic\_opstream(3)

Class template for Output PStreams

## NAME

redi::basic\_opstream - Class template for Output PStreams

## SYNOPSIS

`#include <pstream.h>`

Inherits basic\_ostream\< 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\_opstream** ()\
 Default constructor, creates an uninitialised stream.  **basic\_opstream** (const std::string &cmd, **pmode** mode=**pstdin**)\
 Constructor that initialises the stream by starting a process.  **basic\_opstream** (const std::string &file, const **argv\_type** &argv, **pmode** mode=**pstdin**)\
 Constructor that initialises the stream by starting a process.  **basic\_opstream** (const **argv\_type** &argv, **pmode** mode=**pstdin**)\
 Constructor that initialises the stream by starting a process.  **~basic\_opstream** ()\
 Destructor.  void **open** (const std::string &cmd, **pmode** mode=**pstdin**)\
 Start a process.  void **open** (const std::string &file, const **argv\_type** &argv, **pmode** mode=**pstdin**)\
 Start a process.  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.

### Related Functions

(Note that these are not member functions.)  template\<typename C , typename T \> std::basic\_ostream\< C, T \> & **peof** (std::basic\_ostream\< C, T \> &s)\
 Manipulator to close the pipe connected to the process' stdin.

## Detailed Description

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

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

Writing to an open opstream writes to the standard input of the command; the command's standard output is the same as that of 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\_opstream\< CharT, Traits \>::basic\_opstream (const std::string & cmd, pmode mode = 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\_opstream\< CharT, Traits \>::basic\_opstream (const std::string & file, const argv\_type & argv, pmode mode = 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\_opstream\< CharT, Traits \>::basic\_opstream (const argv\_type & argv, pmode mode = pstdin)` [inline]`, ` [explicit]`

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

**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\_opstream\< CharT, Traits \>::~basic\_opstream ()` [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)**

### 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\_opstream\< CharT, Traits \>::open (const std::string & cmd, pmode mode = pstdin)` [inline]`

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

**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(), and redi::pstreams::pstdin.

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

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

**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(), and redi::pstreams::pstdin.

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

## Friends And Related Function Documentation

### template\<typename C , typename T \> std::basic\_ostream\< C, T \> & peof (std::basic\_ostream\< C, T \> & s)` [related]`

Manipulator to close the pipe connected to the process' stdin. When inserted into an output pstream the manipulator calls **basic\_pstreambuf\<C,T\>::peof()** to close the output pipe, causing the child process to receive the end-of-file indicator on subsequent reads from its `stdin` stream.

**Parameters**

*s* An output PStream class.

**Returns**

The stream object the manipulator was invoked on.

**See also**

**basic\_pstreambuf\<C,T\>::peof()** **basic\_pstream** **basic\_rpstream**

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

## Author

Generated automatically by Doxygen for PStreams from the source code.
