Предыдущий пост -
Следующий пост -

std::basic_streambuf.

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

Базовый класс буфера потока.

basic_streambuf::pubsetbuf()

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

// set character buffer (pubsetbuf)
#include <fstream>      // std::fstream
using std::fstream;

int main () {
  char mybuffer [512];
  fstream filestr;
  //установить буфер массива или хз что тут делать.
  filestr.rdbuf()->pubsetbuf(mybuffer,512);

  // operations with file stream here.

  return 0;
}

 

basic_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;
}

 

basic_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);//хз наверно буфер в 10 позицию устанавливает
			buf->sgetn(buffer,10);//считывает 10 позиций буфера.
			buffer[10]=0;
			cout <<buffer<<'\n';
		}
		f.close();
	}

	return 0;
}

 

basic_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("First sentence\n",15);
		buf->pubsync();
		buf->sputn("Second sentence\n",16);

		f.close();
	}

	return 0;
}

 

basic_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;
}

 

basic_streambuf::snexts()

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

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

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

	return 0;
}

 

basic_streambuf::sbumpc()

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

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

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

	if(f)
	{
		streambuf* buf=f.rdbuf();
		while(buf->sgetc()!=streambuf::traits_type::eof())
		{
			char c=buf->sbumpc();
			cout <<c;
		}
	}
	f.close();

	return 0;
}

 

basic_streambuf::sgetc()

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

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

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

	return 0;
}

 

basic_streambuf::sgetn()

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

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

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

	if(f)
	{
		streambuf* buf=f.rdbuf();
		streamsize size=buf->pubseekoff(0,f.end);
		buf->pubseekoff(0,f.beg);
		contents=new char[size];
		buf->sgetn(contents,size);//получить содержимое буфера в constnts
		f.close();

		cout.write(contents,size);
	}

	return 0;
}

 

 

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

rss