struct filebuf : public streambuf { int fd; // дескриптор файла char opened; // файл открыт int overflow(int c =EOF); int underflow(); // ... // Открывает файл: // если не срабатывает, то возвращает 0, // в случае успеха возвращает "this" filebuf* open(char *name, open_mode om); int close() { /* ... */ } filebuf() { opened = 0; } filebuf(int nfd) { /* ... */ } filebuf(int nfd, char* p, int l) : (p,l) { /* ... */ } ~filebuf() { close(); } }; int filebuf::underflow() // заполняет буфер из fd { if (!opened || allocate()==EOF) return EOF; int count = read(fd, base, eptr-base); if (count <1) return EOF; qptr="base;" pptr="base" + count; return *qptr & 0377; }