Mega Code Archive

 
Categories / C++ Tutorial / File Stream
 

File descriptor out buffer

/* The following code example is taken from the book  * "The C++ Standard Library - A Tutorial and Reference"  * by Nicolai M. Josuttis, Addison-Wesley, 1999  *  * (C) Copyright Nicolai M. Josuttis 1999.  * Permission to copy, use, modify, sell and distribute this software  * is granted provided this copyright notice appears in all copies.  * This software is provided "as is" without express or implied  * warranty, and with no claim as to its suitability for any purpose.  */ #include <iostream> #include <streambuf> #include <cstdio> // for write(): #ifdef _MSC_VER # include <io.h> #else # include <unistd.h> #endif class fdoutbuf : public std::streambuf {   protected:     int fd;    // file descriptor   public:     // constructor     fdoutbuf (int _fd) : fd(_fd) {     }   protected:     // write one character     virtual int_type overflow (int_type c) {         if (c != EOF) {             char z = c;             if (write (fd, &z, 1) != 1) {                 return EOF;             }         }         return c;     }     // write multiple characters     virtual     std::streamsize xsputn (const char* s,                             std::streamsize num) {         return write(fd,s,num);     } }; class fdostream : public std::ostream {   protected:     fdoutbuf buf;   public:     fdostream (int fd) : std::ostream(0), buf(fd) {         rdbuf(&buf);     } }; int main() {     fdostream out(1);    // stream with buffer writing to file descriptor 1     out << "31 hexadecimal: " << std::hex << 31 << std::endl; } 31 hexadecimal: 1f