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

# ofdbuf(3bobcat)

Output stream buffer initialized by a file descriptor

## NAME

FBB::OFdBuf - Output stream buffer initialized by a file descriptor

## SYNOPSIS

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

## DESCRIPTION

**FBB::OFdBuf** objects may be used as a *std::streambuf* of *std::ostream* objects to allow insertions into a file descriptor.

File descriptors are not defined within the context of **C++**, but they can be used on operating systems that support the concept. Realize that using file descriptors introduces operating system dependencies.

## NAMESPACE

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

## INHERITS FROM

**std::streambuf**

## ENUMERATION

The public enumeration *Mode* defined in the class *FBB::OFdStreamBuf* has the following values:

- o

  **CLOSE\_FD**, indicating that the file descriptor used by the object must be closed;

- o

  **KEEP\_FD** (the default) indicating that the file descriptor used by the object must not be closed.

## CONSTRUCTORS

- o

  **OFdBuf()**:\
   This constructor initializes the streambuf, without associating it to a file descriptor, and without using buffering. The member *reset* can be used to associate the object later on with a file descriptor and optionally a buffer size.  When the object is destroyed or if the mode-less overloaded version of the *reset* member is called, the file descriptor is closed.

-

  - o

  **OFdBuf(Mode mode)**:\
   This constructor initializes the streambuf, without associating it to a file descriptor, and without using buffering. The member *reset* can be used to associate the object later on with a file descriptor and optionally a buffer size.  When the object is destroyed or if the mode-less overloaded version of the member *reset* is called, the *Mode* argument determines whether the file descriptor will be closed or will remain open.

-

  - o

  **OFdBuf(int fd, size\_t n = 1)**:\
   This constructor initializes the streambuf, associating it to file descriptor *fd*, and an optional unget buffer size (by default having size 1).  When *reset* is called subsequently, or if the object is destroyed the provided file descriptor will be closed.

-

  - o

  **OFdBuf(int fd, size\_t n = 1)**:\
   This constructor initializes the streambuf, associating it to file descriptor *fd*, and an optional unget buffer size (by default having size 1).  When the object is destroyed or if the mode-less overloaded version of the member *reset* is called, the file descriptor will be closed.

-

  - o

  **OFdBuf(int fd, Mode mode, size\_t n = 1)**:\
   This constructor initializes the streambuf, associating it to file descriptor *fd*, and an optional unget buffer size (by default having size 1).  When the object is destroyed or if the mode-less overloaded version of the member *reset* is called, the *Mode* argument determines whether the file descriptor will be closed or will remain open.

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

## MEMBER FUNCTIONS

All members of *std::streambuf* are available, as *FBB::OFdBuf* inherits from this class.

- o

  **void eoi()**:\
   The file descriptor used by the *OFdBuf* is closed, irrespective of the *Mode* that was specified when the *OFdBuf* object was constructed. Following *eoi* the *OFdBuf* object can no longer be used until one of its *reset* members has been called. Instead of using this member the *eoi* manipulator can also be used.

-

  - o

  **int fd() const**:\
   The file descriptor used by the *OFdBuf* object is returned. If the *OFdBuf* is not associated with a file descriptor -1 is returned.

-

  - o

  **void reset(int xfd, size\_t n = 1)**:\
   The streambuf is (re)initialized, using file descriptor *fd*, and an optional unget buffer size (by default having size 1). When called repeatedly, the *Mode* specification used whem the object was constructed determines whether the file descriptor will be closed or will remain open.

-

  - o

  **void reset(int xfd, Mode mode, size\_t n = 1)**:\
   The streambuf is (re)initialized, using file descriptor *fd*, a file descriptor closing parameter and an optional unget buffer size (by default having size 1). Depending on the *Mode* argument the object’s currently used file descriptor will be closed or will remain open when the *IFdBuf* object is destroyed.

-

  - o

  **void warn(bool on)**:\
   When *on == true* a warning is written to the standard error stream when its *sync* member returns -1. If *warn* is not explicitly called *on == true* is used.

-

  ## MANIPULATOR

- o

  **FBB::eoi**:\
   The *eoi* manipulator can be inserted into the *ostream* instead of calling the *OFdBuf::end* member. It performs the same actions as the *eoi* member.  If inserted into a plain *std::ostream* nothing happens.

## EXAMPLE

```
#include <unistd.h>
#include <ostream>
#include <string>
#include <bobcat/ofdbuf>
using namespace std;
using namespace FBB;
int main(int argc, char **argv)
{
                           // define a streambuf of 20 or argv[1] characters
    OFdBuf buf{ STDOUT_FILENO, argc == 1 ? 20 : stoul(argv[1]) };
    ostream out{ &buf };
    out << "First line, just to start the insertions\n" <<
            argv[0] << endl <<          // using an explicit flush
            argc << "\n"
            "a long line to end this multiple-insertions statement\n";
}
```

## FILES

*bobcat/ofdbuf* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md), [**ifdbuf**(3bobcat)](/ifdbuf/3bobcat.md), [**ofdstream**(3bobcat)](/ofdstream/3bobcat.md), **std::streambuf**

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