Biblioteca C ++ IOS - rdbuf

Descrição

É usado para obter / definir o buffer de fluxo. Se sb for um ponteiro nulo, a função definirá automaticamente os sinalizadores de estado de erro de badbit (que podem lançar uma exceção se as exceções de membro tiverem passado para o badbit).

Algumas classes de fluxo derivadas (como stringstream e fstream) mantêm seu próprio buffer de fluxo interno, ao qual são associadas na construção. Chamar esta função para alterar o buffer de fluxo associado não deve ter efeito sobre o buffer de fluxo interno: o fluxo terá um buffer de fluxo associado que é diferente de seu buffer de fluxo interno (embora as operações de entrada / saída em fluxos sempre usem o buffer de fluxo associado, conforme retornado por esta função de membro).

Declaração

A seguir está a declaração para a função ios :: rdbuf.

get (1)	streambuf* rdbuf() const;
set (2)	streambuf* rdbuf (streambuf* sb);

A primeira forma (1) retorna um ponteiro para o objeto de buffer de fluxo atualmente associado ao fluxo.

A segunda forma (2) também define o objeto apontado por sb como o buffer de fluxo associado ao fluxo e limpa os sinalizadores de estado de erro.

Parâmetros

sb - Ponteiro para um objeto streambuf.

Valor de retorno

Um ponteiro para o objeto de buffer de fluxo associado ao fluxo antes da chamada.

Exceções

Basic guarantee- se uma exceção for lançada, o fluxo está em um estado válido. Ele lança uma exceção de falha de tipo de membro se sb for um ponteiro nulo e as exceções de membro foram definidas para lançar para badbit.

Corridas de dados

Acessa (1) ou modifica (2) o objeto de fluxo.

O acesso simultâneo ao mesmo objeto de fluxo pode causar disputas de dados.

Exemplo

No exemplo a seguir explica sobre a função ios :: rdbuf.

#include <iostream>     
#include <fstream>      

int main () {
   std::streambuf *psbuf, *backup;
   std::ofstream filestr;
   filestr.open ("test.txt");

   backup = std::cout.rdbuf();     

   psbuf = filestr.rdbuf();        
   std::cout.rdbuf(psbuf);         

   std::cout << "This is written to the file";

   std::cout.rdbuf(backup);        

   filestr.close();

   return 0;
}