Biblioteca IOS de C ++ - rdbuf

Descripción

Se utiliza para obtener / configurar el búfer de transmisión. Si sb es un puntero nulo, la función establece automáticamente los indicadores de estado de error de badbit (que pueden generar una excepción si las excepciones de miembros se han pasado badbit).

Algunas clases de flujo derivadas (como stringstream y fstream) mantienen su propio búfer de flujo interno, al que se asocian en la construcción. Llamar a esta función para cambiar el búfer de flujo asociado no tendrá ningún efecto en ese búfer de flujo interno: el flujo tendrá un búfer de flujo asociado que es diferente de su búfer de flujo interno (aunque las operaciones de entrada / salida en los flujos siempre utilizan el búfer de flujo asociado, devuelto por esta función miembro).

Declaración

A continuación se muestra la declaración de la función ios :: rdbuf.

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

La primera forma (1) devuelve un puntero al objeto de búfer de flujo asociado actualmente con el flujo.

La segunda forma (2) también establece el objeto señalado por sb como el búfer de flujo asociado con el flujo y borra los indicadores de estado de error.

Parámetros

sb - Puntero a un objeto streambuf.

Valor devuelto

Un puntero al objeto de búfer de transmisión asociado con la transmisión antes de la llamada.

Excepciones

Basic guarantee- si se lanza una excepción, el flujo está en un estado válido. Lanza una excepción de error de tipo de miembro si sb es un puntero nulo y las excepciones de miembro se establecieron para lanzar para badbit.

Carreras de datos

Accede (1) o modifica (2) el objeto de flujo.

El acceso simultáneo al mismo objeto de flujo puede provocar carreras de datos.

Ejemplo

En el siguiente ejemplo se explica la función 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;
}