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

# ifdbuf(3bobcat)

Input stream buffer initialized by a file descriptor

## NAME

FBB::IFdBuf - Input stream buffer initialized by a file descriptor

## SYNOPSIS

**#include \<bobcat/ifdbuf\>** (when using **FBB::IFdBuf**\
 **#include \<bobcat/ifdbufs\>** (when using **FBB::IFdBufS**

Linking option: *-lbobcat*

## DESCRIPTION

**FBB::IFdBuf** objects may be used as a *std::streambuf* of *std::istream* objects to allow extractions from a file descriptor.

**FBB::IFdBufS** objects operate like **FBB::IFdBuf** objects but use **FBB::Selector** objects to check whether information on the object’s file descriptor is available before reading information from the 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::IFdStreamBuf* 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

  **IFdBuf()**:\
   This constructor initializes the streambuf, without associating it to a file descriptor, and without using buffering. The member *reset* can be used subsequently to associate the object 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 not closed.

-

  - o

  **IFdBuf(Mode mode)**:\
   This constructor initializes the streambuf, without associating it to a file descriptor, and without using buffering. The member *reset* can be used subsequently to associate the object 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

  **IFdBuf(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 is not closed.

-

  - o

  **IFdBuf(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 *reset* member is called, the *Mode* argument determines whether the file descriptor will be closed or will remain open.

-

  - o

  **IFdBufS constructors**:\
   Use **IFdBufS** constructors corresponding to **IFdBuf** constructors to construct the corresponding **IFdBufS** objects.

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

## MEMBER FUNCTIONS

All members of *std::streambuf* are available, as *FBB::IFdBuf(S)* inherits from this class.

- o

  **void close()**:\
   The file descriptor used by the *IFdBuf(S)* is closed, irrespective of the *Mode* that was specified when the *IFdBuf(S)* object was constructed. Following *close* the *IFdBuf(S)* object can no longer be used until one of its *reset* members has been called.

-

  - o

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

-

  - o

  **void reset(int fd, 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 fd, 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(S)* object is destroyed.

## EXAMPLE

```
#include <unistd.h>
#include <istream>
#include <iostream>
#include <bobcat/ifdbuf>
using namespace std;
using namespace FBB;
int main(int argc, char **argv)
{
                           // define a streambuf of 20 or argv[1] characters
    IFdBuf buf{ STDIN_FILENO, argc == 1 ? 20 : stoul(argv[1]) };
    istream in{ &buf };
    cout << in.rdbuf();
}
```

## FILES

*bobcat/ifdbuf* - defines the **FBB::IFdBuf** class interface\
 *bobcat/ifdbufs* - defines the **FBB::IFdBufS** class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md), [**ifdstream**(3bobcat)](/ifdstream/3bobcat.md), [**ofdbuf**(3bobcat)](/ofdbuf/3bobcat.md), **std::streambuf**

## BUGS

The member *xsgetn(char \*dest, std::streamsize n)* sets *istream::good()* to *false* when fewer bytes than *n* were read using *istream::read()*. Also see *xsgetn*’s description.

Note that by default the provided file descriptors remain open. The complementary class [**ofdbuf**(3bobcat)](/ofdbuf/3bobcat.md) by default *closes* the file descriptor.

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