FBB::IFdBuf - Input stream buffer initialized by a file
descriptor
#include <bobcat/ifdbuf>
Linking option: -lbobcat
FBB::IFdBuf objects may be used as a std::streambuf
of std::istream objects to allow extractions from 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.
FBB
All constructors, members, operators and manipulators, mentioned in this
man-page, are defined in the namespace FBB.
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.
- 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.
Copy and move constructors (and assignment operators) are not
available.
All members of std::streambuf are available, as
FBB::IFdBuf inherits from this class.
- o
- void close():
The file descriptor used by the IFdBuf is closed, irrespective of the
Mode that was specified when the IFdBuf object was
constructed. Following close the IFdBuf 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 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 object is destroyed.
#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();
}
bobcat/ifdbuf - defines the class interface
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) by default closes the
file descriptor.
- o
- https://fbb-git.gitlab.io/bobcat/: gitlab project page;
- o
- bobcat_6.02.02-x.dsc: detached signature;
- o
- bobcat_6.02.02-x.tar.gz: source archive;
- o
- bobcat_6.02.02-x_i386.changes: change log;
- o
- libbobcat1_6.02.02-x_*.deb: debian package containing the
libraries;
- o
- libbobcat1-dev_6.02.02-x_*.deb: debian package containing the
libraries, headers and manual pages;
Bobcat is an acronym of `Brokken’s Own Base Classes And
Templates’.
This is free software, distributed under the terms of the GNU
General Public License (GPL).
Frank B. Brokken (f.b.brokken@rug.nl).