---
name: "iostreambuf"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "4.08.06-1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/iostreambuf"
---

# iostreambuf(3bobcat)

streambuf allowing input and output operations

## NAME

FBB::IOStreambuf - streambuf allowing input and output operations

## SYNOPSIS

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

## DESCRIPTION

This class implements a specialization of the **std::streambuf** class, allowing input operations from and output operations to different files. It is intended to be used in combination with **FBB::IOStream**, thus allowing all stream-based input and output operations using the same object without the need to use *seek*-operations. Using an **FBB::IOStream** object it is, e.g., possible to construct two-way communications using pipes, much like the facilities offered by sockets.

If the streams that will be associated with the **IOStreambuf** object support seeking, then the **IOStreambuf** will do so to. Seeking might also be available for a single stream (either the **std::istream** or the **std::ostream**).

When the **IOStreambuf** object goes out of scope, its associated **std::ostream** object is flushed.

## NAMESPACE

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

## INHERITS FROM

**std::streambuf**

## CONSTRUCTORS

- o

  **IOStreambuf()**:\
   The default constructor results in a **IOStreambuf** object that cannot be immediately used. Its member **open()** must be called first.

- o

  **IOStreambuf(std::istream &in, std::ostream &out)**:\
   This constructor associates the **IOStreambuf** 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 **IOStreambuf()** should outlive the **IOStreambuf** object.  Copy and move constructors is not available.

## MEMBER FUNCTIONS

All members of **std::streambuf** are available, as **FBB::IOStreambuf** inherits from these classes.

- o

  **void open(std::istream &in, std::ostream &out)**:\
   This member (re)associates the **IOStreambuf** 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 **IOStreambuf()** should outlive the **IOStreambuf** object. If this member is called for an **IOStreambuf** object already associated with an **std::ostream** object, the already associated  **std::ostream** object is flushed before setting up the new association.

## VIRTUAL PROTECTED MEMBER FUNCTIONS

The following **std::streambuf** member functions should only be called when the **FBB::Streambuf** object is associated with **std::istream** and **std::ostream** objects (i.e., they should not be called between the construction of a default **FBB:IOStreambuf** object and a subsequent call of **IOStreambuf::open()**):

The members listed in this section implement the tasks of  comparably named virtual function in the class’s private interface. This separates the redefinable interface from the user-interface. The class **IOStreamBuf** can, in accordance with Liskov’s Substitution Principle, be used as a *std:streambuf*; but it also offers facilities for classes deriving from **IOStreamBuf**. These facilities are listed here.

- o

  **pos\_type pSeekoff(off\_type offset, std::ios::seekdir way,** **std::ios::openmode mode =**  **std::ios::in \| std::ios::out)**:\
   With seekable streams, repositions the associated **std::istream** or **std::ostream** is repositioned to offset *offset*, relative to *way*.

- o

  **pos\_type pSeekpos(off\_type offset, std::ios::openmode mode =**  **std::ios::in \| std::ios::out)**:\
   With seekable streams, repositions the associated **std::istream** or **std::ostream** is repositioned to offset *offset*, relative to the beginning of the stream.

- o

  **int pSync()**:\
   This member flushes the associated **std::ostream** object.

- o

  **std::streamsize pXsputn(char const \*buffer, std::streamsize n)**:\
   This member inserts *n* characters from *buffer* into the associated **std::ostream** stream.

## EXAMPLE

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

## FILES

*bobcat/iostreambuf* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md), [**iostream**(3bobcat)](/iostream/3bobcat.md), [**process**(3bobcat)](/process/3bobcat.md)

## BUGS

None reported.

## DISTRIBUTION FILES

- o

  *bobcat\_4.08.06-x.dsc*: detached signature;

- o

  *bobcat\_4.08.06-x.tar.gz*: source archive;

- o

  *bobcat\_4.08.06-x\_i386.changes*: change log;

- o

  *libbobcat1\_4.08.06-x\_\*.deb*: debian package holding the libraries;

- o

  *libbobcat1-dev\_4.08.06-x\_\*.deb*: debian package holding the libraries, headers and manual pages;

- o

  *http://sourceforge.net/projects/bobcat*: public archive location;

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