23 static const size_t buflen = 4000 * 1024;
26 : xstream::posix::fd(f, c), rbuf(buflen), wbuf(buflen)
28 LOG(
"fd::streambuf (int fd)");
33 void streambuf::flush_write() {
34 LOG(
"fd::streambuf::flush");
35 write(wbuf.buf, taken());
39 int streambuf::sync() {
40 LOG(
"fd::streambuf::sync");
46 xstream::posix::fd::sync();
52 int streambuf::overflow(
int c) {
53 LOG(
"fd::streambuf::overflow (" << c <<
")");
60 *pptr() = static_cast <
char >(
c);
65 std::streamsize streambuf::xsputn(
const char* buffer, std::streamsize n)
68 std::streamsize count = write(buffer, n);
72 int streambuf::underflow() {
73 LOG(
"fd::streambuf::underflow");
75 std::streamsize nread = read(rbuf.buf,rbuf.size);
77 setg(rbuf.buf, rbuf.buf, rbuf.buf + nread);
82 return static_cast<int>(*rbuf.buf);
86 std::streamsize streambuf::xsgetn(
char *buffer, std::streamsize n) {
87 LOG(
"fd::streambuf::xsgetn " << n);
88 std::streamsize av = available();
90 std::streamsize nread=0;
103 std::copy(beg, end, buffer);
105 setg(rbuf.buf, end, rbuf.buf + rbuf.size);
108 nread += read(buffer + av, n - av);
110 LOG(
"\tread " << nread);
114 void streambuf::reset_write()
116 setp(wbuf.buf, wbuf.buf + wbuf.size);
119 streambuf::~streambuf() {
120 LOG(
"fd::~streambuf");
debugging/logging support
streambuf(int fd, bool close=true)
construct specifying the file descriptor
C++ streambuf to work with file descriptors.
POSIX helper objects and functions.