std::streambuf.

Рубрика: streambuf, Дата: 16 August, 2013, Автор:

Класс буфера потока.

streambuf::pubsetbuf()

Установить буфер массив.

#include <fstream>
using std::fstream;

int main()
{
	char buf[512];
	fstream f;
	f.rdbuf()->pubsetbuf(buf,512);

	return 0;
}

 

streambuf::pubseekoff()

Установить внутренний указатель состоянии относительного положения.

#include <iostream>
using std::cout;
using std::streambuf;
#include <fstream>
using std::fstream;

int main()
{
	fstream f("test.txt");
	if(f)
	{
		streambuf* buf=f.rdbuf();
		long size=buf->pubseekoff(0,f.end);
		cout <<"size= "<<size<<'\n';
		f.close();
	}

	return 0;
}

 

streambuf::pubseekpos()

Установить внутренний указатель на позицию абсолютного положения.

#include <iostream>
using std::cout;
using std::streambuf;
#include <fstream>
using std::fstream;

int main()
{
	fstream f("test.txt");
	if(f)
	{
		streambuf* buf=f.rdbuf();
		long size=buf->pubseekoff(0,f.end);
		if(size>20)
		{
			char buffer[11];
			buf->pubseekpos(10);
			buf->sgetn(buffer,10);
			buffer[10]=0;
			cout <<buffer<<'\n';
		}
		f.close();
	}

	return 0;
}

 

streambuf::pubsync()

Синхронизация буфера потока.

#include <iostream>
using std::cout;
using std::streambuf;
#include <fstream>
using std::ofstream;

int main()
{
	ofstream f("test.txt");
	if(f)
	{
		streambuf* buf=f.rdbuf();

		buf->sputn("Hellow eb ta\n",15);
		buf->pubsync();
		buf->sputn("mazagaka\n",15);
	}

	return 0;
}

 

streambuf::in_avail()

Получить количество символов, доступных для чтения.

#include <iostream>
using std::cout;
using std::streambuf;
using std::streamsize;
#include <fstream>
using std::ifstream;

int main()
{
	ifstream f("test.txt");
	if(f.good())
	{
		streambuf* buf=f.rdbuf();
		char c; f >>c;
		streamsize size=buf->in_avail();
		cout <<"c= "<<c<<'\n';
		cout <<"size= "<<size<<'\n';
	}

	return 0;
}

 

streambuf::snexts()

Переход к следующей позиции, и приобретают характер.

#include <iostream>
using std::cout;
using std::streambuf;
#include <fstream>
using std::ifstream;
#include <cstdio>

int main()
{
	ifstream f("test.txt");
	if(f)
	{
		streambuf* buf=f.rdbuf();
		do
		{
			char c=buf->sgetc();
			cout <<c;
		}while(buf->snextc()!=EOF);
		f.close();
	}

	return 0;
}

 

streambuf::sbumpc()

Получить текущего символа и перехода к следующей позиции.

// show file content - sbumpc() example
#include <iostream>     // std::cout, std::streambuf
using std::cout;
using std::streambuf;
#include <fstream>      // std::ifstream
using std::ifstream;
#include <cstdio>       // EOF

int main () {
  ifstream f ("test.txt");
  if (f) {
    streambuf * buf = f.rdbuf();
    while ( buf->sgetc() != EOF )
    {
      char ch = buf->sbumpc();
      cout << ch;
    }
    f.close();
  }
  return 0;
}

 

streambuf::sgetc()

Получить текущий символ.

// show file content - sgetc() example
#include <iostream>     // std::cout, std::streambuf
using std::cout;
using std::streambuf;
#include <fstream>      // std::ifstream
using std::ifstream;
#include <cstdio>       // EOF

int main () {
  ifstream f ("test.txt");
  if (f) {
    streambuf * buf = f.rdbuf();
    do {
      char c = buf->sgetc();
      std::cout << c;
    } while ( buf->snextc() != EOF );
    f.close();
  }
  return 0;
}

 

streambuf::sgetn()

Получить последовательность символов.

// read a file into buffer - sgetn() example
#include <iostream>     // std::cout, std::streambuf, std::streamsize
using std::cout;
using std::streambuf;
using std::streamsize;
#include <fstream>      // std::ifstream
using std::ifstream;

int main () {
  char* content;
  ifstream f ("test.txt");

  if (f) {
    streambuf * buf = f.rdbuf();
    streamsize size = buf->pubseekoff(0,f.end);
    buf->pubseekoff(0,f.beg);       // rewind
    content = new char [size];
    buf->sgetn (content,size);
    f.close();
    std::cout.write (content,size);
  }
  return 0;
}

 

streambuf::sputbackc()

Поместить символ назад.

// sputbackc example
#include <iostream>     // std::cin, std::cout, std::streambuf, std::streamsize
using std::cin;
using std::cout;
using std::streambuf;
#include <cstdio>       // EOF

int main () {
  char c;
  streambuf * buf = cin.rdbuf();

  std::cout << "Please, enter some letters and then a number: ";
  do {
    c = buf->sbumpc();

    if ( (c>='0') && (c <='9') )
    {
      buf->sputbackc (c);
      long n;
      cin >> n;
      cout << "You entered number " << n << '\n';
      break;
    }
  } while ( c != EOF );

  return 0;
}

 

streambuf::sungetc()

Уменьшение текущей позиции.

// sungetc example
#include <iostream>     // std::cin, std::cout, std::streambuf, std::streamsize
using std::cin;
using std::cout;
using std::streambuf;
using std::streamsize;
#include <cstdio>       // EOF

int main () {
  char c;
  streambuf * buf = cin.rdbuf();

  cout << "Please, enter some letters and then a number: ";
  do {
    c = buf->sbumpc();

    if ( (c>='0') && (c <='9') )
    {
      buf->sungetc ();
      long n;
      std::cin >> n;
      std::cout << "You entered number " << n << '\n';
      break;
    }
  } while ( c != EOF );

  return 0;
}

 

streambuf::sputc()

Магазин символ в текущей позиции и положить увеличить положить указатель.

// typewriter - sputc() example
#include <iostream>     // std::cin, std::cout, std::streambuf
using std::cin;
using std::cout;
using std::streambuf;
#include <fstream>      // std::ofstream
using std::ofstream;

int main () {
  char c;
  ofstream f ("test.txt");
  if (f) {
    cout << "Writing to file. Type a dot (.) to end.\n";
    streambuf * buf = f.rdbuf();
    do {
      c = cin.get();
      buf->sputc(c);
    } while (c!='.');
    f.close();
  }

  return 0;
}

 

streambuf::sputn()

Положите последовательность символов.

// sputn() example
#include <iostream>     // std::streambuf
using std::streambuf;
#include <fstream>      // std::ofstream
using std::ofstream;

int main () {
  const char sent[]= "Sample sentence";

  ofstream f ("test.txt");
  if (f) {
    streambuf* buf = f.rdbuf();
    buf->sputn (sent,sizeof(sent)-1);
    f.close();
  }

  return 0;
}

 

[youtube]https://www.youtube.com/watch?v=3JJfqWHNn2E[/youtube]

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *