Compartir a través de


basic_streambuf (Clase)

Describe una clase base abstracta para derivar un búfer de secuencia, que controla la transmisión de elementos a y desde una representación concreta de una secuencia.

Sintaxis

template <class Elem, class Tr = char_traits<Elem>>
class basic_streambuf;

Parámetros

Elem
char_type.

Tr
Carácter traits_type.

Comentarios

La plantilla de clase describe una clase base abstracta para derivar un búfer de secuencia, que controla la transmisión de elementos a y desde una representación concreta de una secuencia. Un objeto de clase basic_streambuf ayuda a controlar un flujo con elementos de tipo Tr, también conocidos como char_type, cuyos rasgos de caracteres están determinados por la clase char_traits, también conocida como traits_type.

Cada búfer de secuencia controla conceptualmente dos secuencias independientes: una para extracciones (entrada) y otra para inserciones (salida). Pero una representación específica podría hacer inaccesible una de estas secuencias o las dos. Normalmente mantiene cierta relación entre las dos secuencias. Lo que se inserta en el flujo de salida de un objeto basic_stringbuf<Elem, Tr>, por ejemplo, es lo que más adelante se extraerá de su flujo de entrada. Al colocar un flujo de un objeto basic_filebuf<Elem, Tr>, se coloca el otro flujo en tándem.

La interfaz pública a la plantilla de clase basic_streambuf proporciona las operaciones comunes a todos los búferes de secuencia, independientemente de lo especializados que sean. La interfaz protegida proporciona las operaciones necesarias para que una representación específica de una secuencia haga su trabajo. Las funciones miembro virtuales protegidas le permiten personalizar el comportamiento de un búfer de secuencia derivado para una representación específica de una secuencia. Cada búfer de secuencia derivado de esta biblioteca describe cómo especializa el comportamiento de sus funciones miembro virtuales protegidas. El comportamiento predeterminado de la clase base, que a menudo consiste en no hacer nada, se describe en este artículo.

Las restantes funciones miembro protegidas controlan las operaciones de copia a y desde cualquier almacenamiento proporcionado para almacenar en búfer las transmisiones a y desde secuencias. Por ejemplo, un búfer de entrada se caracteriza por:

  • eback, un puntero al principio del búfer.

  • gptr, un puntero al siguiente elemento que se va a leer.

  • egptr, un puntero después del final del búfer.

De forma similar, un búfer de salida se caracteriza por:

  • pbase, un puntero al principio del búfer.

  • pptr, un puntero al siguiente elemento que se va a escribir.

  • epptr, un puntero después del final del búfer.

Para cualquier búfer, se usa el siguiente protocolo:

  • Si el siguiente puntero es nulo, no existe ningún búfer. De lo contrario, los tres punteros apuntan a la misma secuencia. Se puede comparar su orden de forma segura.

  • En el caso de un búfer de salida, si el siguiente puntero tiene, en comparación, un valor menor que el puntero final, puede almacenar un elemento en la posición de escritura designada por el siguiente puntero.

  • En el caso de un búfer de entrada, si el siguiente puntero tiene, en comparación, un valor menor que el puntero final, puede leer un elemento en la posición de lectura designada por el siguiente puntero.

  • En el caso de un búfer de entrada, si el puntero inicial tiene, en comparación, un valor menor que el siguiente puntero, puede devolver un elemento a la posición de devolución designada por el siguiente puntero reducido.

Todas las funciones miembro virtuales protegidas que escriba para una clase derivada de basic_streambuf<Elem, Tr> deben cooperar en el mantenimiento de este protocolo.

Un objeto de clase basic_streambuf<Elem, Tr> almacena los seis punteros descritos anteriormente. También almacena un objeto de configuración regional en un objeto de tipo locale para su uso potencial por parte de un búfer de flujo derivado.

Constructores

Constructor Descripción
basic_streambuf Construye un objeto de tipo basic_streambuf.

Typedefs

Nombre de tipo Descripción
char_type Asocia un nombre de tipo con el parámetro de plantilla Elem.
int_type Asocia un nombre de tipo dentro del ámbito basic_streambuf con el parámetro de plantilla Elem.
off_type Asocia un nombre de tipo dentro del ámbito basic_streambuf con el parámetro de plantilla Elem.
pos_type Asocia un nombre de tipo dentro del ámbito basic_streambuf con el parámetro de plantilla Elem.
traits_type Asocia un nombre de tipo con el parámetro de plantilla Tr.

Funciones miembro

Función de miembro Descripción
eback Función protegida que devuelve un puntero al principio del búfer de entrada.
egptr Función protegida que devuelve un puntero después del final del búfer de entrada.
epptr Función protegida que devuelve un puntero después del final del búfer de salida.
gbump Función protegida que agrega count al siguiente puntero del búfer de entrada.
getloc Obtiene la configuración regional del objeto basic_streambuf.
gptr Función protegida que devuelve un puntero al siguiente elemento del búfer de entrada.
imbue Función virtual protegida a la que llama pubimbue.
in_avail Devuelve el número de elementos que están listos para ser leídos desde el búfer.
overflow Función virtual protegida a la que se puede llamar cuando se inserta un carácter nuevo en un búfer lleno.
pbackfail Función miembro virtual protegida que intenta volver a colocar un elemento en el flujo de entrada y convertirlo después en el elemento actual (indicado por el puntero siguiente).
pbase Función protegida que devuelve un puntero al principio del búfer de salida.
pbump Función protegida que agrega count al siguiente puntero del búfer de salida.
pptr Función protegida que devuelve un puntero al siguiente elemento del búfer de salida.
pubimbue Establece la configuración regional del objeto basic_streambuf.
pubseekoff Llama a seekoff, una función virtual protegida que se invalida en una clase derivada.
pubseekpos Llama a seekpos, una función virtual protegida que se invalida en una clase derivada, y restablece la posición actual del puntero.
pubsetbuf Llama a setbuf, una función virtual protegida que se invalida en una clase derivada.
pubsync Llama a sync, una función virtual protegida que se invalida en una clase derivada, y actualiza el flujo externo asociado a este búfer.
sbumpc Lee y devuelve el elemento actual, moviendo el puntero de la secuencia.
seekoff La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas.
seekpos La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas.
setbuf La función miembro virtual protegida realiza una determinada operación para cada búfer de secuencia derivado.
setg Función protegida que almacena _Gbeg en el puntero inicial, _Gnext en el siguiente puntero y _Gend en el puntero final del búfer de entrada.
setp Función protegida que almacena _Pbeg en el puntero inicial y _Pend en el puntero final del búfer de salida.
sgetc Devuelve el elemento actual sin cambiar la posición en la secuencia.
sgetn Devuelve el número de elementos leídos.
showmanyc Función miembro virtual protegida que devuelve el recuento del número de caracteres que se puede extraer del flujo de entrada. También garantiza que el programa no estará sujeto a una espera indefinida.
snextc Lee el elemento actual y devuelve el siguiente elemento.
sputbackc Coloca un char_type en la secuencia.
sputc Coloca un carácter en la secuencia.
sputn Coloca una cadena de caracteres en la secuencia.
stossc Mueve más allá del elemento actual de la secuencia.
sungetc Obtiene un carácter de la secuencia.
swap Intercambia los valores de este objeto por los valores en el parámetro del objeto basic_streambuf proporcionado.
sync Función virtual protegida que intenta sincronizar las secuencias controladas con cualquier secuencia externa asociada.
uflow Función virtual protegida que extrae el elemento actual del flujo de entrada.
underflow Función virtual protegida que extrae el elemento actual del flujo de entrada.
xsgetn Función virtual protegida que extrae elementos del flujo de entrada.
xsputn Función virtual protegida que inserta elementos en el flujo de salida.

Operadores

Operador Descripción
operator= Asigna los valores de este objeto desde otro objeto basic_streambuf.

Requisitos

Encabezado:<streambuf>

Espacio de nombres: std

basic_streambuf::basic_streambuf

Construye un objeto de tipo basic_streambuf.

basic_streambuf();

basic_streambuf(const basic_streambuf& right);

Parámetros

right
Referencia a un valor L al objeto basic_streambuf que se usa para establecer los valores de este objeto basic_streambuf.

Comentarios

El primer constructor protegido almacena un puntero nulo en todos los punteros que controlan el búfer de entrada y el de salida. También almacena locale::classic en el objeto de configuración regional. Para más información, vea locale::classic.

El segundo constructor protegido copia los punteros y la configuración regional desde right.

basic_streambuf::char_type

Asocia un nombre de tipo al parámetro de plantilla Elem.

typedef Elem char_type;

basic_streambuf::eback

Función protegida que devuelve un puntero al principio del búfer de entrada.

char_type *eback() const;

Valor devuelto

Puntero al principio del búfer de entrada.

basic_streambuf::egptr

Función protegida que devuelve un puntero después del final del búfer de entrada.

char_type *egptr() const;

Valor devuelto

Puntero después del final del búfer de entrada.

basic_streambuf::epptr

Función protegida que devuelve un puntero después del final del búfer de salida.

char_type *epptr() const;

Valor devuelto

Puntero después del final del búfer de salida.

basic_streambuf::gbump

Función protegida que agrega count al siguiente puntero del búfer de entrada.

void gbump(int count);

Parámetros

count
Cantidad por la que va a avanzar el puntero.

basic_streambuf::getloc

Obtiene la configuración regional del objeto basic_streambuf.

locale getloc() const;

Valor devuelto

Objeto de configuración regional almacenado.

Comentarios

Para obtener información relacionada, vea ios_base::getloc.

Ejemplo

// basic_streambuf_getloc.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   cout << cout.rdbuf( )->getloc( ).name( ).c_str( ) << endl;
}
C

basic_streambuf::gptr

Función protegida que devuelve un puntero al siguiente elemento del búfer de entrada.

char_type *gptr() const;

Valor devuelto

Puntero al siguiente elemento del búfer de entrada.

basic_streambuf::imbue

Función virtual protegida a la que llama pubimbue.

virtual void imbue(const locale& _Loc);

Parámetros

_Loc
Referencia a una configuración regional.

Comentarios

El comportamiento predeterminado es no hacer nada.

basic_streambuf::in_avail

Devuelve el número de elementos que están listos para ser leídos desde el búfer.

streamsize in_avail();

Valor devuelto

Número de elementos que están listos para leerse desde el búfer.

Comentarios

Si hay una posición de lectura disponible, la función miembro devuelve egptr - gptr. De lo contrario, devuelve showmanyc.

Ejemplo

// basic_streambuf_in_avail.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   char c;
   // cin's buffer is empty, in_avail will return 0
   cout << cin.rdbuf( )->in_avail( ) << endl;
   cin >> c;
   cout << cin.rdbuf( )->in_avail( ) << endl;
}

basic_streambuf::int_type

Asocia un nombre de tipo del ámbito basic_streambuf a uno de los tipos de un parámetro de plantilla.

typedef typename traits_type::int_type int_type;

basic_streambuf::off_type

Asocia un nombre de tipo del ámbito basic_streambuf a uno de los tipos de un parámetro de plantilla.

typedef typename traits_type::off_type off_type;

basic_streambuf::operator=

Asigna los valores de este objeto desde otro objeto basic_streambuf.

basic_streambuf& operator=(const basic_streambuf& right);

Parámetros

right
Referencia a un valor L al objeto basic_streambuf que se usa para asignar valores a este objeto.

Comentarios

El operador de miembro protegido copia desde right los punteros que controlan el búfer de entrada y el búfer de salida. También almacena right.getloc() en locale object. Devuelve *this.

basic_streambuf::overflow

Función virtual protegida a la que se puede llamar cuando se inserta un carácter nuevo en un búfer lleno.

virtual int_type overflow(int_type _Meta = traits_type::eof());

Parámetros

_Meta
El carácter que se va a insertar en el búfer o traits_type::eof.

Valor devuelto

Si la función no se ejecuta correctamente, devuelve traits_type::eof o inicia una excepción. De lo contrario, devuelve traits_type::not_eof(_ Meta). El comportamiento predeterminado es devolver traits_type::eof.

Comentarios

Si _Meta no es igual a traits_type::eof, la función miembro virtual protegida intenta insertar el elemento traits_type::to_char_type(_Meta) en el flujo de salida. Puede hacerlo de varias maneras:

  • Si hay una write position disponible, puede almacenar el elemento en la posición de escritura e incrementar el puntero siguiente para el búfer de salida.

  • Puede proporcionar una posición de escritura al asignar almacenamiento nuevo o adicional para el búfer de salida.

  • Puede facilitar una posición de escritura al escribir en algún destino externo algunos o todos los elementos situados entre los punteros inicial y siguientes para el búfer de salida.

La función virtual overflow, junto con las funciones sync y underflow, define las características de la clase derivada de streambuf. Cada clase derivada podría implementar overflow de manera diferente, pero la interfaz con la clase stream que realiza la llamada es igual.

La función overflow recibe llamadas con más frecuencia de funciones públicas streambuf como sputc y sputn cuando el área de colocación está llena, pero otras clases, incluidas las clases stream, pueden llamar a overflow en cualquier momento.

La función usa los caracteres del área de colocación entre los punteros pbase y pptr y luego reinicializa el área de colocación. La función overflow también debe usar nCh (si nCh no es EOF) o puede optar por colocar ese carácter en la nueva área de colocación para que se use en la siguiente llamada.

La definición de usar varía entre clases derivadas. Por ejemplo, la clase filebuf escribe sus caracteres en un archivo, mientras que la clase strstreambuf los mantiene en su búfer y (si el búfer se designa como dinámico) lo expande en respuesta a una llamada a overflow. Esta expansión se logra al liberar el búfer antiguo y reemplazarlo por uno nuevo y mayor. Los punteros se ajustan según sea necesario.

basic_streambuf::p backfail

Función miembro virtual protegida que intenta volver a colocar un elemento en el flujo de entrada y convertirlo después en el elemento actual (indicado por el puntero siguiente).

virtual int_type pbackfail(int_type _Meta = traits_type::eof());

Parámetros

_Meta
El carácter que se va a insertar en el búfer o traits_type::eof.

Valor devuelto

Si la función no se ejecuta correctamente, devuelve traits_type::eof o inicia una excepción. De lo contrario, devuelve algún otro valor. El comportamiento predeterminado es devolver traits_type::eof.

Comentarios

Si _Meta es igual a traits_type::eof, el elemento que se va a devolver es realmente el que ya está en el flujo por delante del elemento actual. De lo contrario, ese elemento se sustituye por traits_type::to_char_type(_Meta). La función puede devolver un elemento de distintas maneras:

  • Si hay una posición de devolución disponible, puede almacenar el elemento en ella y reducir el puntero siguiente para el búfer de entrada.

  • Puede facilitar una posición de devolución al asignar almacenamiento nuevo o adicional para el búfer de entrada.

  • En el caso de un búfer de flujo con flujos de entrada y salida comunes, puede facilitar una posición de devolución al escribir en algún destino externo algunos o todos los elementos situados entre los punteros inicial y siguientes para el búfer de salida.

basic_streambuf::p base

Función protegida que devuelve un puntero al principio del búfer de salida.

char_type *pbase() const;

Valor devuelto

Puntero al principio del búfer de salida.

basic_streambuf::p bump

Función protegida que agrega count al siguiente puntero del búfer de salida.

void pbump(int count);

Parámetros

count
Número de caracteres por el que se va a mover la posición de escritura hacia delante.

basic_streambuf::p os_type

Asocia un nombre de tipo del ámbito basic_streambuf a uno de los tipos de un parámetro de plantilla.

typedef typename traits_type::pos_type pos_type;

basic_streambuf::p ptr

Función protegida que devuelve un puntero al siguiente elemento del búfer de salida.

char_type *pptr() const;

Valor devuelto

Puntero al siguiente elemento del búfer de salida.

basic_streambuf::p ubimbue

Establece la configuración regional del objeto basic_streambuf.

locale pubimbue(const locale& _Loc);

Parámetros

_Loc
Referencia a una configuración regional.

Valor devuelto

Valor anterior almacenado en el objeto de configuración regional.

Comentarios

La función miembro almacena _ Loc en el objeto de configuración regional y llama a imbue.

Ejemplo

Vea basic_ios::imbue para obtener un ejemplo de uso de pubimbue.

basic_streambuf::p ubseekoff

Llama a seekoff, una función virtual protegida que se invalida en una clase derivada.

pos_type pubseekoff(off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

Parámetros

_Off
La posición que se va a buscar relativa a _Way.

_Way
El punto de partida de las operaciones de desplazamiento. Vea los valores posibles en seekdir.

_Which
Especifica el modo de la posición del puntero. El valor predeterminado es permitirle modificar las posiciones de lectura y escritura.

Valor devuelto

Devuelve la posición nueva o una posición de flujo no válida (seekoff(_ Off, _Way, _Which)).

Comentarios

Mueve el puntero en relación con _Way.

basic_streambuf::p ubseekpos

Llama a seekpos, una función virtual protegida que se invalida en una clase derivada, y restablece la posición actual del puntero.

pos_type pubseekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

Parámetros

_Sp
La posición que se va a buscar.

_Which
Especifica el modo de la posición del puntero. El valor predeterminado es permitirle modificar las posiciones de lectura y escritura.

Valor devuelto

Posición nueva o una posición de flujo no válida. Para determinar si la posición del flujo no es válida, compare el valor devuelto con pos_type(off_type(-1)).

Comentarios

La función miembro devuelve seekpos(_ Sp, _Which).

basic_streambuf::p ubsetbuf

Llama a setbuf, una función virtual protegida que se invalida en una clase derivada.

basic_streambuf<Elem, Tr> *pubsetbuf(
    char_type* _Buffer,
    streamsize count);

Parámetros

_Buffer
Puntero a char_type para esta instancia.

count
Tamaño del búfer.

Valor devuelto

Devuelve setbuf(_Buffer, count).

basic_streambuf::p ubsync

Llama a sync, una función virtual protegida que se invalida en una clase derivada, y actualiza el flujo externo asociado a este búfer.

int pubsync();

Valor devuelto

Devuelve sync o -1 si se produce un error.

basic_streambuf::sbumpc

Lee y devuelve el elemento actual, moviendo el puntero de la secuencia.

int_type sbumpc();

Valor devuelto

Elemento actual.

Comentarios

Si hay una posición de lectura disponible, la función miembro devuelve traits_type::to_int_type(*gptr) e incrementa el puntero siguiente para el búfer de entrada. De lo contrario, devuelve uflow.

Ejemplo

// basic_streambuf_sbumpc.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   int i = 0;
   i = cin.rdbuf( )->sbumpc( );
   cout << i << endl;
}
3
33
51

basic_streambuf::seekoff

Función miembro virtual protegida que trata de modificar las posiciones actuales de las secuencias controladas.

virtual pos_type seekoff(
    off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

Parámetros

_Off
La posición que se va a buscar relativa a _Way.

_Way
El punto de partida de las operaciones de desplazamiento. Vea los valores posibles en seekdir.

_Which
Especifica el modo de la posición del puntero. El valor predeterminado es permitirle modificar las posiciones de lectura y escritura.

Valor devuelto

Devuelve la posición nueva o una posición de flujo no válida (seekoff (_ Off, _Way, _Which)).

Comentarios

La nueva posición se determina de la siguiente forma:

  • Si _Way == ios_base::beg, la nueva posición es el principio del flujo más _ Off.

  • Si _Way == ios_base::cur, la nueva posición es la posición actual del flujo más _ Off.

  • Si _Way == ios_base::end, la nueva posición es el final del flujo más _ Off.

Normalmente, si which & ios_base::in es distinto de cero, el flujo de entrada se ve afectado y, si which & ios_base::out es distinto de cero, el flujo de salida se ve afectado. Pero el uso real de este parámetro varía entre búferes de flujo derivados.

Si la función consigue modificar la posición o posiciones de flujo correctamente, devuelve la posición de flujo resultante o una de las posiciones de flujo resultantes. De lo contrario, devuelve una posición de flujo no válida. El comportamiento predeterminado es devolver una posición de flujo no válida.

basic_streambuf::seekpos

Función miembro virtual protegida que trata de modificar las posiciones actuales de las secuencias controladas.

virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

Parámetros

_Sp
La posición que se va a buscar.

_Which
Especifica el modo de la posición del puntero. El valor predeterminado es permitirle modificar las posiciones de lectura y escritura.

Valor devuelto

Posición nueva o una posición de flujo no válida. Para determinar si la posición del flujo no es válida, compare el valor devuelto con pos_type(off_type(-1)).

Comentarios

La nueva posición es _ Sp.

Normalmente, si which & ios_base::in es distinto de cero, el flujo de entrada se ve afectado y, si which & ios_base::out es distinto de cero, el flujo de salida se ve afectado. Pero el uso real de este parámetro varía entre búferes de flujo derivados.

Si la función consigue modificar la posición o posiciones de flujo correctamente, devuelve la posición de flujo resultante o una de las posiciones de flujo resultantes. De lo contrario, devuelve una posición de flujo no válida (-1). El comportamiento predeterminado es devolver una posición de flujo no válida.

basic_streambuf::setbuf

Función miembro virtual protegida que realiza una operación específica de cada búfer de flujo derivado.

virtual basic_streambuf<Elem, Tr> *setbuf(
    char_type* _Buffer,
    streamsize count);

Parámetros

_Buffer
Puntero a un búfer.

count
Tamaño del búfer.

Valor devuelto

El comportamiento predeterminado es devolver this.

Comentarios

Vea basic_filebuf. setbuf proporciona un área de memoria para el objeto streambuf que se va a usar. En las clases derivadas se define cómo se va a usar el búfer.

basic_streambuf::setg

Función protegida que almacena _ Gbeg en el puntero inicial, _Gnext en el siguiente puntero y _Gend en el puntero final del búfer de entrada.

void setg(char_type* _Gbeg,
    char_type* _Gnext,
    char_type* _Gend);

Parámetros

_Gbeg
Puntero al principio del búfer.

_Gnext
Puntero a cualquier ubicación en mitad del búfer.

_Gend
Puntero al final del búfer.

basic_streambuf::setp

Función protegida que almacena _Pbeg en el puntero inicial y _Pbeg en el puntero final del búfer de salida.

void setp(char_type* _Pbeg, char_type* _Pend);

Parámetros

_Pbeg
Puntero al principio del búfer.

_Pend
Puntero al final del búfer.

basic_streambuf::sgetc

Devuelve el elemento actual sin cambiar la posición en la secuencia.

int_type sgetc();

Valor devuelto

Elemento actual.

Comentarios

Si hay una posición de lectura disponible, la función miembro devuelve traits_type::to_int_type(*gptr). De lo contrario, devuelve underflow.

Ejemplo

// basic_streambuf_sgetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;
   ifstream myfile( "basic_streambuf_sgetc.txt", ios::in );

   char i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
   i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
}

basic_streambuf::sgetn

Extrae count caracteres del búfer de entrada y los almacena en el búfer ptr proporcionado.

Este método es potencialmente inseguro, ya que se basa en el llamador para comprobar que los valores pasados son correctos.

streamsize sgetn(
    char_type* ptr,
    streamsize count);

Parámetros

ptr
Búfer que va a contener los caracteres extraídos.

count
Número de elementos que se van a leer.

Valor devuelto

Número de elementos leídos. Para obtener más información, consulte streamsize.

Comentarios

La función miembro devuelve xsgetn(ptr, count).

Ejemplo

// basic_streambuf_sgetn.cpp
// compile with: /EHsc /W3
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    ifstream myfile("basic_streambuf_sgetn.txt", ios::in);
    char a[10];

    // Extract 3 characters from myfile and store them in a.
    streamsize i = myfile.rdbuf()->sgetn(&a[0], 3);  // C4996
    a[i] = myfile.widen('\0');

    // Display the size and contents of the buffer passed to sgetn.
    cout << i << " " << a << endl;

    // Display the contents of the original input buffer.
    cout << myfile.rdbuf() << endl;
}

basic_streambuf::showmanyc

Función miembro virtual protegida que devuelve un recuento del número de caracteres que se pueden extraer del flujo de entrada y garantiza que el programa no esté sujeto a una espera indefinida.

virtual streamsize showmanyc();

Valor devuelto

El comportamiento predeterminado es devolver cero.

basic_streambuf::snextc

Lee el elemento actual y devuelve el siguiente elemento.

int_type snextc();

Valor devuelto

Siguiente elemento del flujo.

Comentarios

La función miembro llama a sbumpc y, si esa función devuelve traits_type::eof, devuelve traits_type::eof. De lo contrario, devuelve sgetc.

Ejemplo

// basic_streambuf_snextc.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
   using namespace std;
   int i = 0;
   i = cin.rdbuf( )->snextc( );
   // cout << ( int )char_traits<char>::eof << endl;
   cout << i << endl;
}
aa
aa97

basic_streambuf::sputbackc

Coloca char_type en el flujo.

int_type sputbackc(char_type _Ch);

Parámetros

_Ch
Carácter.

Valor devuelto

Devuelve el carácter o el error.

Comentarios

Si hay una posición de devolución disponible y _Ch es igual que el carácter almacenado en esa posición, la función miembro disminuye el puntero siguiente para el búfer de entrada y devuelve traits_type::to_int_type(_Ch). De lo contrario, devuelve pbackfail(_Ch).

Ejemplo

// basic_streambuf_sputbackc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
    using namespace std;

    ifstream myfile("basic_streambuf_sputbackc.txt",
        ios::in);

    int i = myfile.rdbuf()->sbumpc();
    cout << (char)i << endl;
    int j = myfile.rdbuf()->sputbackc('z');
    if (j == 'z')
    {
        cout << "it worked" << endl;
    }
    i = myfile.rdbuf()->sgetc();
    cout << (char)i << endl;
}

basic_streambuf::sputc

Coloca un carácter en la secuencia.

int_type sputc(char_type _Ch);

Parámetros

_Ch
Carácter.

Valor devuelto

Devuelve el carácter, si se ejecuta correctamente.

Comentarios

Si hay una write position disponible, la función miembro almacena _Ch en la posición de escritura, incrementa el puntero siguiente para el búfer de salida y devuelve traits_type::to_int_type(_Ch). De lo contrario, devuelve overflow(_Ch).

Ejemplo

// basic_streambuf_sputc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;

   int i = cout.rdbuf( )->sputc( 'a' );
   cout << endl << ( char )i << endl;
}
a
a

basic_streambuf::sputn

Coloca una cadena de caracteres en la secuencia.

streamsize sputn(const char_type* ptr, streamsize count);

Parámetros

ptr
Cadena de caracteres.

count
Recuento de caracteres.

Valor devuelto

Número de caracteres insertados en el flujo.

Comentarios

La función miembro devuelve xsputn(ptr, count). Para obtener más información, vea la sección Comentarios de esta función miembro.

Ejemplo

// basic_streambuf_sputn.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    streamsize i = cout.rdbuf()->sputn("test", 4);
    cout << endl << i << endl;
}
test
4

basic_streambuf::stossc

Mueve más allá del elemento actual de la secuencia.

void stossc();

Comentarios

La función miembro llama a sbumpc. No se necesita una implementación para proporcionar esta función miembro.

Ejemplo

// basic_streambuf_stossc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;
   ifstream myfile( "basic_streambuf_stossc.txt", ios::in );

   myfile.rdbuf( )->stossc( );
   char i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
}

basic_streambuf::sungetc

Obtiene un carácter de la secuencia.

int_type sungetc();

Valor devuelto

Devuelve el carácter o un error.

Comentarios

Si hay una posición de devolución disponible, la función miembro disminuye el puntero siguiente para el búfer de entrada y devuelve traits_type::to_int_type(*gptr). Sin embargo, no siempre es posible determinar el último carácter leído, por lo que se puede capturar en el estado del búfer actual. Si esto ocurre, la función devuelve pbackfail. Para evitar esta situación, realice un seguimiento del carácter que se va a devolver y llame a sputbackc(ch), lo que no producirá un error siempre que no lo llame al principio del flujo ni intente devolver más de un carácter.

Ejemplo

// basic_streambuf_sungetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;

   ifstream myfile( "basic_streambuf_sungetc.txt", ios::in );

   // Read and increment
   int i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;

   // Read and increment
   i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;

   // Decrement, read, and do not increment
   i = myfile.rdbuf( )->sungetc( );
   cout << ( char )i << endl;

   i = myfile.rdbuf( )->sungetc( );
   cout << ( char )i << endl;

   i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;
}

basic_streambuf::swap

Intercambia los valores de este objeto por los valores del objeto basic_streambuf proporcionado.

void swap(basic_streambuf& right);

Parámetros

right
Referencia a un valor L al objeto basic_streambuf que se usa para intercambiar valores.

Comentarios

La función miembro protegida intercambia con right todos los punteros que controlan el input buffer y el output buffer. También intercambia right.getloc() con el objeto locale.

basic_streambuf::sync

Función virtual protegida que intenta sincronizar las secuencias controladas con cualquier secuencia externa asociada.

virtual int sync();

Valor devuelto

Si la función no se puede ejecutar correctamente, devuelve -1. El comportamiento predeterminado es devolver cero.

Comentarios

sync implica escribir cualquier elemento entre los punteros inicial y siguientes para el búfer de salida. No conlleva devolver ningún elemento entre los punteros siguientes y final para el búfer de entrada.

basic_streambuf::traits_type

Asocia un nombre de tipo al parámetro de plantilla Tr.

typedef Tr traits_type;

basic_streambuf::uflow

Función virtual protegida que extrae el elemento actual del flujo de entrada.

virtual int_type uflow();

Valor devuelto

Elemento actual.

Comentarios

La función miembro virtual protegida intenta extraer el elemento actual ch del flujo de entrada, avanzar la posición de flujo actual y devolver el elemento como traits_type::to_int_type(ch). Puede hacerlo de varias maneras:

  • Si hay una posición de lectura disponible, toma ch como elemento almacenado en la posición de lectura y avanza el puntero siguiente del búfer de entrada.

  • Puede leer un elemento directamente, desde algún origen externo, y ofrecerlo como valor ch.

  • En el caso de un búfer de flujo con flujos de entrada y salida comunes, puede facilitar una posición de lectura al escribir en algún destino externo algunos o todos los elementos situados entre los punteros inicial y siguientes para el búfer de salida. O bien puede asignar almacenamiento nuevo o adicional para el búfer de entrada. Luego la función lee, desde algún origen externo, uno o más elementos.

Si la función no se ejecuta correctamente, devuelve traits_type::eof o inicia una excepción. De lo contrario, devuelve el elemento actual ch en el flujo de entrada, convertido tal como se ha descrito arriba, y avanza el puntero siguiente para el búfer de entrada. El comportamiento predeterminado es llamar a underflow y, si esa función devuelve traits_type::eof, devolver traits_type::eof. De lo contrario, la función devuelve el elemento actual ch en el flujo de entrada, convertido tal como se ha descrito anteriormente, y avanza el puntero siguiente para el búfer de entrada.

basic_streambuf::underflow

Función virtual protegida que extrae el elemento actual de la secuencia de entrada.

virtual int_type underflow();

Valor devuelto

Elemento actual.

Comentarios

La función miembro virtual protegida intenta extraer el elemento actual ch del flujo de entrada, sin avanzar la posición de flujo actual, y devolverlo como traits_type::to_int_type(ch). Puede hacerlo de varias maneras:

  • Si hay una posición de lectura disponible, ch es el elemento almacenado en la posición de lectura. Para obtener más información, vea la sección Comentarios del tema basic_streambuf (Clase).

  • Puede facilitar una posición de lectura mediante la asignación de almacenamiento nuevo o adicional para el búfer de entrada y luego leer, desde algún origen externo, uno o más elementos. Para obtener más información, vea la sección Comentarios del tema basic_streambuf (Clase).

Si la función no se puede ejecutar correctamente, devuelve traits_type::eof() o inicia una excepción. De lo contrario, devuelve el elemento actual en el flujo de entrada, convertido tal como se ha descrito anteriormente. El comportamiento predeterminado es devolver traits_type::eof().

La función virtual underflow, junto con las funciones sync y overflow, define las características de la clase derivada de streambuf. Cada clase derivada podría implementar underflow de manera diferente, pero la interfaz con la clase stream que realiza la llamada es igual.

La función underflow recibe llamadas con más frecuencia de funciones públicas streambuf como sgetc y sgetn cuando el área de obtención está llena, pero otras clases, incluidas las clases stream, pueden llamar a underflow en cualquier momento.

La función underflow proporciona al área de obtención caracteres desde el origen de entrada. Si el área de obtención contiene caracteres, underflow devuelve el primero. Si el área de obtención está vacía, la llena y devuelve el siguiente carácter (que deja en el área de obtención). Si no hay más caracteres disponibles, underflow devuelve EOF y deja vacía el área de obtención.

En la clase strstreambuf, underflow ajusta el puntero egptr para acceder al almacenamiento asignado dinámicamente mediante una llamada a overflow.

basic_streambuf::xsgetn

Función virtual protegida para extraer elementos del flujo de entrada.

Este método es potencialmente inseguro, ya que se basa en el llamador para comprobar que los valores pasados son correctos.

virtual streamsize xsgetn(
    char_type* ptr,
    streamsize count);

Parámetros

ptr
Búfer que va a contener los caracteres extraídos.

count
Número de elementos que se van a extraer.

Valor devuelto

Número de elementos extraídos.

Comentarios

La función miembro virtual protegida extrae hasta countelementos del flujo de entrada, como si realizara llamadas repetidas a sbumpc, y los almacena en la matriz a partir de ptr. Devuelve el número de elementos extraídos.

basic_streambuf::xsputn

Función virtual protegida para insertar elementos en el flujo de salida.

virtual streamsize xsputn(const char_type* ptr, streamsize count);

Parámetros

ptr
Puntero a los elementos que se van a insertar.

count
Número de elementos que se van a insertar.

Valor devuelto

Número de elementos insertados en el flujo.

Comentarios

La función miembro virtual protegida inserta hasta count elementos en el flujo de salida, como si realizara llamadas repetidas a sputc, desde la matriz que comienza en ptr. La inserción de caracteres en el flujo de salida se detiene una vez que todos los caracteres count se han escrito o si una llamada a sputc( count) devolviera traits::eof(). Devuelve el número de elementos insertados.

Consulte también

Seguridad para subprocesos en la biblioteca estándar de C++
Programación con iostream
Convenciones de iostreams