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
El 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
El 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