#include<cstdio>
#include<cstring>
#include<iostream>
#include<streambuf>
#ifdef _MSC_VER
#include<io.h>
#else
#include<unistd.h>
#endif
using namespace std;
class inbuf :public streambuf
{
protected:
const static int BufSize = 10;
char Buffer[BufSize];
public:
inbuf()
{
setg(Buffer + 4, Buffer + 4, Buffer + 4);
}
protected:
virtual int_type underflow()
{
if (gptr() < egptr())
return traits_type::to_int_type(*gptr());
int NumPutback = gptr() - eback();
if (NumPutback >= 4)
NumPutback = 4;
memmove(Buffer + (4 - NumPutback), gptr() - NumPutback, NumPutback);
int num=_read(0, Buffer + 4, BufSize - 4);
if (num <= 0)
return EOF;
setg(Buffer + 4- NumPutback, Buffer + 4, Buffer + 4 + num);
return traits_type::to_int_type(*gptr());
}
};
int main()
{
inbuf ib;
istream in(&ib);
char c;
for (int i = 0; i < 20; ++i)
{
in.get(c);
cout << c << flush;
if (i == 8)
{
in.unget();
in.unget();
}
}
cout << endl;
return 0;
}