---
name: "iostream"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "6.07.01-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/iostream/3bobcat"
---

# iostream(3bobcat)

Combines std::istream and std::ostream features

## NAME

FBB::IOStream - Combines std::istream and std::ostream features

## SYNOPSIS

**#include \<bobcat/iostream\>**\
 Linking option: *-lbobcat*

## DESCRIPTION

This class combines the features of the **std::istream** and **std::ostream** classes. The **std::istream** and **std::ostream** may be physically different streams. **FBB:IOStream** objects may, e.g., be associated with streams wrapped around *pipes* (see, e.g., **FBB::IfdStream** and **FBB::OFdStream**), to construct bi-directional pipes.

## NAMESPACE

**FBB**\
 All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace **FBB**.

## INHERITS FROM

**FBB::IOBuf** (private inheritance),\
 **std::istream**,\
 **std::ostream**

## CONSTRUCTORS

- o

  **IOStream()**:\
   The default constructor constructs an empty **FBB::IOStream** objects. It should not be used before its *open* member (see below) was called.

- o

  **IOStream(std::istream &in, std::ostream &out)**:\
   This constructor associates the **IOStream** object with a *std::istream* and a *std::ostream*. All output operations will be passed on to the *std::ostream*, all input operations to the *std::istream*. The streams passed to *IOStream* should outlive the **IOStream** object. This constructor performs the actions of the default constructor and then calls the *IOStream::open* member

Copy and move constructors (and assignment operators) are not available.

## MEMBER FUNCTIONS

All members of *std::istream* and *std::ostream*  are available, as **FBB::IOStream** inherits from these classes. Furthermore, when switching between *std::istream* and *std::ostream* operations, no intermediate *seekg()* or *seekp()* operation will normally be required, since the base classes will normally be associated with physically different streams.

- o

  **void open(std::istream &in, std::ostream &out)**:\
   This member (re)associates the **IOStream** object with a *std::istream* and a *std::ostream*. All output operations will be passed on to the *std::ostream*, all input operations to the *std::istream*. The streams passed to *IOStream()* should outlive the **IOStream** object. If this member is called for an **IOStream** object already associated with an *std::ostream* object, the already associated *std::ostream* object is flushed before setting up the new association.

- o

  **void clear()**:\
   This member clears the error states of the associated *std::istream* and *std::ostream* objects.

## EXAMPLE

See the example provided with [**process**(3bobcat)](/process/3bobcat.md).

## FILES

*bobcat/iostream* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md), [**ifdstream**(3bobcat)](/ifdstream/3bobcat.md), [**iobuf**(3bobcat)](/iobuf/3bobcat.md), [**ofdstream**(3bobcat)](/ofdstream/3bobcat.md), [**process**(3bobcat)](/process/3bobcat.md)

## BUGS

None Reported.

## BOBCAT PROJECT FILES

- o

  *https://fbb-git.gitlab.io/bobcat/*: gitlab project page;

Debian Bobcat project files:

- o

  *libbobcat6*: debian package containing the shared library, changelog and copyright note;

- o

  *libbobcat-dev*: debian package containing the static library, headers, manual pages, and developer info;

## BOBCAT

Bobcat is an acronym of \`Brokken’s Own Base Classes And Templates’.

## COPYRIGHT

This is free software, distributed under the terms of the GNU General Public License (GPL).

## AUTHOR

Frank B. Brokken (**f.b.brokken@rug.nl**).
