Partilhar via


basic_streambuf Classe

Descreve uma classe base abstrata para derivar um buffer de fluxo, que controla a transmissão de elementos de e para uma representação específica de um fluxo.

Sintaxe

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

Parâmetros

Elem
Uma char_type.

Tr
O personagem traits_type.

Observações

O modelo de classe descreve uma classe base abstrata para derivar um buffer de fluxo, que controla a transmissão de elementos de e para uma representação específica de um fluxo. Um objeto de classe basic_streambuf ajuda a controlar um fluxo com elementos do tipo Tr, também conhecido como char_type, cujos traços de caráter são determinados pela classe char_traits, também conhecida como traits_type.

Cada buffer de fluxo controla conceitualmente dois fluxos independentes: um para extrações (entrada) e outro para inserções (saída). Uma representação específica pode, no entanto, tornar um ou ambos os fluxos inacessíveis. Normalmente, mantém alguma relação entre os dois fluxos. O que você insere no fluxo de saída de um objeto basic_stringbuf<Elem, Tr> por exemplo, é o que você extrai posteriormente de seu fluxo de entrada. Quando você posiciona um fluxo de um basic_filebuf<Elem, Tr> objeto, você posiciona o outro fluxo em conjunto.

A interface pública para o modelo basic_streambuf de classe fornece as operações que são comuns a todos os buffers de fluxo, por mais especializados que sejam. A interface protegida fornece as operações necessárias para que uma representação específica de um fluxo faça o seu trabalho. As funções de membro virtual protegidas permitem adaptar o comportamento de um buffer de fluxo derivado para uma representação específica de um fluxo. Cada buffer de fluxo derivado nesta biblioteca descreve como ele especializa o comportamento de suas funções de membro virtual protegidas. O comportamento padrão para a classe base, que geralmente não faz nada, é descrito neste artigo.

As restantes funções de membro protegidas controlam a cópia de e para qualquer armazenamento fornecido para transmissões de buffer de e para fluxos. Um buffer de entrada, por exemplo, é caracterizado por:

  • eback, um ponteiro para o início do buffer.

  • gptr, um ponteiro para o próximo elemento a ser lido.

  • egptr, um ponteiro após o final do buffer.

Da mesma forma, um buffer de saída é caracterizado por:

  • pbase, um ponteiro para o início do buffer.

  • pptr, um ponteiro para o próximo elemento a ser gravado.

  • epptr, um ponteiro após o final do buffer.

Para qualquer buffer, o seguinte protocolo é usado:

  • Se o próximo ponteiro for nulo, nenhum buffer existirá. Caso contrário, todos os três ponteiros apontam para a mesma sequência. Eles podem ser comparados com segurança para a ordem.

  • Para um buffer de saída, se o ponteiro seguinte comparar menos do que o ponteiro final, você poderá armazenar um elemento na posição de gravação designada pelo ponteiro seguinte.

  • Para um buffer de entrada, se o ponteiro seguinte comparar menos do que o ponteiro final, você poderá ler um elemento na posição de leitura designada pelo ponteiro seguinte.

  • Para um buffer de entrada, se o ponteiro inicial comparar menos do que o ponteiro seguinte, você poderá colocar de volta um elemento na posição de putback designada pelo ponteiro seguinte diminuído.

Qualquer função de membro virtual protegida que você escrever para uma classe derivada de basic_streambuf<Elem, Tr> deve cooperar na manutenção deste protocolo.

Um objeto de classe basic_streambuf<Elem, Tr> armazena os seis ponteiros descritos anteriormente. Ele também armazena um objeto de localidade em um objeto de localidade do tipo para uso potencial por um buffer de fluxo derivado.

Construtores

Construtor Descrição
basic_streambuf Constrói um objeto do tipo basic_streambuf.

Typedefs (definições de tipos)

Nome do tipo Descrição
char_type Associa um nome de tipo ao Elem parâmetro template.
int_type Associa um nome de tipo dentro basic_streambuf do escopo ao Elem parâmetro template.
off_type Associa um nome de tipo dentro basic_streambuf do escopo ao Elem parâmetro template.
pos_type Associa um nome de tipo dentro basic_streambuf do escopo ao Elem parâmetro template.
traits_type Associa um nome de tipo ao Tr parâmetro template.

Funções de membro

Função de membro Descrição
Eback Uma função protegida que retorna um ponteiro para o início do buffer de entrada.
EGPTR Uma função protegida que retorna um ponteiro após o final do buffer de entrada.
EPPTR Uma função protegida que retorna um ponteiro após o final do buffer de saída.
Gbump Uma função protegida que adiciona count ao ponteiro seguinte para o buffer de entrada.
Getloc Obtém a basic_streambuf localidade do objeto.
GPTR Uma função protegida que retorna um ponteiro para o próximo elemento do buffer de entrada.
imbue Uma função virtual protegida chamada por pubimbue.
in_avail Retorna o número de elementos que estão prontos para serem lidos do buffer.
transbordamento Uma função virtual protegida que pode ser chamada quando um novo caractere é inserido em um buffer completo.
Pbackfail Uma função de membro virtual protegida que tenta colocar de volta um elemento no fluxo de entrada e, em seguida, torná-lo o elemento atual (apontado pelo ponteiro seguinte).
pbase Uma função protegida que retorna um ponteiro para o início do buffer de saída.
Pbump Uma função protegida que adiciona count ao ponteiro seguinte para o buffer de saída.
PPTR Uma função protegida que retorna um ponteiro para o próximo elemento do buffer de saída.
Púbimbue Define a basic_streambuf localidade do objeto.
Pubseekoff Calls seekoff, uma função virtual protegida que é substituída em uma classe derivada.
Pubseekpos Chama seekpos, uma função virtual protegida que é substituída em uma classe derivada e redefine a posição atual do ponteiro.
Pubsetbuf Chama setbuf, uma função virtual protegida que é substituída em uma classe derivada.
PubSync Chama a sincronização, uma função virtual protegida que é substituída em uma classe derivada e atualiza o fluxo externo associado a esse buffer.
Sbumpc Lê e retorna o elemento atual, movendo o ponteiro de fluxo.
Busca A função de membro virtual protegido tenta alterar as posições atuais para os fluxos controlados.
Seekpos A função de membro virtual protegido tenta alterar as posições atuais para os fluxos controlados.
Setbuf A função de membro virtual protegido executa uma operação específica para cada buffer de fluxo derivado.
Setg Uma função protegida que armazena _Gbeg no ponteiro inicial, _Gnext no ponteiro seguinte e _Gend no ponteiro final para o buffer de entrada.
Setp Uma função protegida que armazena _Pbeg no ponteiro inicial e _Pend no ponteiro final para o buffer de saída.
Sgetc Retorna o elemento atual sem alterar a posição no fluxo.
Sgetn Retorna o número de elementos lidos.
showmanyc Função de membro virtual protegida que retorna uma contagem do número de caracteres que podem ser extraídos do fluxo de entrada. Também garante que o programa não será sujeito a uma espera indefinida.
snextc Lê o elemento atual e retorna o seguinte elemento.
Sputbackc Coloca um char_type no fluxo.
Expetoração Coloca um personagem no fluxo.
Sputn Coloca uma cadeia de caracteres no fluxo.
STOSSC Passe pelo elemento atual no fluxo.
Sungetc Obtém um personagem do fluxo.
trocar Troca os valores neste objeto pelos valores no parâmetro de objeto fornecido basic_streambuf .
sincronização Uma função virtual protegida que tenta sincronizar os fluxos controlados com quaisquer fluxos externos associados.
uflow Uma função virtual protegida que extrai o elemento atual do fluxo de entrada.
subfluxo Uma função virtual protegida que extrai o elemento atual do fluxo de entrada.
xsgetn Uma função virtual protegida que extrai elementos do fluxo de entrada.
XSPUTN Uma função virtual protegida que insere elementos no fluxo de saída.

Operadores

Operador Descrição
operador= Atribui os valores deste objeto a partir de outro basic_streambuf objeto.

Requerimentos

Cabeçalho:<Streambuf>

Espaço de nomes: std

basic_streambuf::basic_streambuf

Constrói um objeto do tipo basic_streambuf.

basic_streambuf();

basic_streambuf(const basic_streambuf& right);

Parâmetros

direito
Uma referência lvalue para o basic_streambuf objeto que é usado para definir os valores para este basic_streambuf objeto.

Observações

O primeiro construtor protegido armazena um ponteiro nulo em todos os ponteiros que controlam o buffer de entrada e o buffer de saída. Ele também armazena locale::classic no objeto locale. Para obter mais informações, consulte locale::classic.

O segundo construtor protegido copia os ponteiros e a localidade da direita.

basic_streambuf::char_type

Associa um nome de tipo ao parâmetro de modelo Elem .

typedef Elem char_type;

basic_streambuf::eback

Uma função protegida que retorna um ponteiro para o início do buffer de entrada.

char_type *eback() const;

Valor de retorno

Um ponteiro para o início do buffer de entrada.

basic_streambuf::egptr

Uma função protegida que retorna um ponteiro após o final do buffer de entrada.

char_type *egptr() const;

Valor de retorno

Um ponteiro após o final do buffer de entrada.

basic_streambuf::epptr

Uma função protegida que retorna um ponteiro após o final do buffer de saída.

char_type *epptr() const;

Valor de retorno

Um ponteiro após o final do buffer de saída.

basic_streambuf::gbump

Uma função protegida que adiciona contagem ao ponteiro seguinte para o buffer de entrada.

void gbump(int count);

Parâmetros

contagem
O valor pelo qual adiantar o ponteiro.

basic_streambuf::getloc

Obtém a localidade do objeto basic_streambuf.

locale getloc() const;

Valor de retorno

O objeto de localidade armazenado.

Observações

Para obter informações relacionadas, consulte ios_base::getloc.

Exemplo

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

Uma função protegida que retorna um ponteiro para o próximo elemento do buffer de entrada.

char_type *gptr() const;

Valor de retorno

Um ponteiro para o próximo elemento do buffer de entrada.

basic_streambuf::imbue

Uma função virtual protegida chamada por pubimbue.

virtual void imbue(const locale& _Loc);

Parâmetros

_Loc
Uma referência a uma localidade.

Observações

O comportamento padrão é não fazer nada.

basic_streambuf::in_avail

Retorna o número de elementos que estão prontos para serem lidos do buffer.

streamsize in_avail();

Valor de retorno

O número de elementos que estão prontos para serem lidos a partir do buffer.

Observações

Se uma posição de leitura estiver disponível, a função de membro retorna egptr - gptr. Caso contrário, ele retorna showmanyc.

Exemplo

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

Associa um nome de tipo dentro basic_streambuf escopo a um dos tipos em um parâmetro de modelo.

typedef typename traits_type::int_type int_type;

basic_streambuf::off_type

Associa um nome de tipo dentro basic_streambuf escopo a um dos tipos em um parâmetro de modelo.

typedef typename traits_type::off_type off_type;

basic_streambuf::operador=

Atribui os valores deste objeto a partir de outro basic_streambuf objeto.

basic_streambuf& operator=(const basic_streambuf& right);

Parâmetros

direito
Uma referência lvalue ao basic_streambuf objeto que é usado para atribuir valores a esse objeto.

Observações

O operador membro protegido copia da direita os ponteiros que controlam o buffer de entrada e o buffer de saída. Ele também armazena right.locale object no . Ele retorna *this.

basic_streambuf::estouro

Uma função virtual protegida que pode ser chamada quando um novo caractere é inserido em um buffer completo.

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

Parâmetros

_Meta
O caractere a ser inserido no buffer ou traits_type::eof.

Valor de retorno

Se a função não tiver êxito, ela retornará traits_type::eof ou lançará uma exceção. Caso contrário, ele retorna traits_type::not_eof(_ Meta). O comportamento padrão é retornar traits_type::eof.

Observações

Se _Meta não for igual a traits_type::eof, a função de membro virtual protegida se esforçará para inserir o elemento traits_type::to_char_type(_Meta) no fluxo de saída. Pode fazê-lo de várias formas:

  • Se um write position estiver disponível, ele pode armazenar o elemento na posição de gravação e incrementar o próximo ponteiro para o buffer de saída.

  • Ele pode disponibilizar uma posição de gravação alocando armazenamento novo ou adicional para o buffer de saída.

  • Ele pode tornar uma posição de gravação disponível escrevendo, em algum destino externo, alguns ou todos os elementos entre os ponteiros inicial e seguinte para o buffer de saída.

A função de estouro virtual, juntamente com as funções sync e underflow , define as características da classe derivada do streambuf. Cada classe derivada pode implementar o estouro de forma diferente, mas a interface com a classe de fluxo de chamada é a mesma.

A overflow função é mais frequentemente chamada por funções públicas streambuf como sputc e sputn quando a área put está cheia, mas outras classes, incluindo as classes stream, podem chamar overflow a qualquer momento.

A função consome os caracteres na área put entre os pbase ponteiros e pptr e, em seguida, reinicializa a área put. A overflow função também deve consumir nCh (se nCh não EOFfor), ou pode optar por colocar esse caractere na nova área put para que ele seja consumido na próxima chamada.

A definição de consumo varia entre as classes derivadas. Por exemplo, a filebuf classe grava seus caracteres em um arquivo, enquanto a strstreambuf classe os mantém em seu buffer e (se o buffer for designado como dinâmico) expande o buffer em resposta a uma chamada para estouro. Esta expansão é conseguida libertando o buffer antigo e substituindo-o por um novo, maior. Os ponteiros são ajustados conforme necessário.

basic_streambuf::p backfail

Uma função de membro virtual protegida que tenta colocar de volta um elemento no fluxo de entrada e, em seguida, torná-lo o elemento atual (apontado pelo ponteiro seguinte).

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

Parâmetros

_Meta
O caractere a ser inserido no buffer ou traits_type::eof.

Valor de retorno

Se a função não tiver êxito, ela retornará traits_type::eof ou lançará uma exceção. Caso contrário, ele retorna algum outro valor. O comportamento padrão é retornar traits_type::eof.

Observações

Se _Meta comparar igual a traits_type::eof, o elemento a ser empurrado para trás é efetivamente aquele que já está no fluxo antes do elemento atual. Caso contrário, esse elemento é substituído por traits_type::to_char_type(_Meta). A função pode colocar de volta um elemento de várias maneiras:

  • Se uma posição de putback estiver disponível, ela pode armazenar o elemento na posição de putback e diminuir o próximo ponteiro para o buffer de entrada.

  • Ele pode disponibilizar uma posição de putback alocando armazenamento novo ou adicional para o buffer de entrada.

  • Para um buffer de fluxo com fluxos de entrada e saída comuns, ele pode disponibilizar uma posição de putback gravando, em algum destino externo, alguns ou todos os elementos entre os ponteiros inicial e seguinte para o buffer de saída.

basic_streambuf::p base

Uma função protegida que retorna um ponteiro para o início do buffer de saída.

char_type *pbase() const;

Valor de retorno

Um ponteiro para o início do buffer de saída.

basic_streambuf::p bump

Uma função protegida que adiciona contagem ao ponteiro seguinte para o buffer de saída.

void pbump(int count);

Parâmetros

contagem
O número de caracteres pelos quais mover a posição de escrita para a frente.

basic_streambuf::p os_type

Associa um nome de tipo dentro basic_streambuf escopo a um dos tipos em um parâmetro de modelo.

typedef typename traits_type::pos_type pos_type;

basic_streambuf::p ptr

Uma função protegida que retorna um ponteiro para o próximo elemento do buffer de saída.

char_type *pptr() const;

Valor de retorno

Um ponteiro para o próximo elemento do buffer de saída.

basic_streambuf::p Ubimbue

Define a localidade do objeto basic_streambuf.

locale pubimbue(const locale& _Loc);

Parâmetros

_Loc
Uma referência a uma localidade.

Valor de retorno

O valor anterior armazenado no objeto locale.

Observações

A função de membro armazena _ Loc no objeto locale e chama imbue.

Exemplo

Consulte basic_ios::imbue para obter um exemplo que usa pubimbue.

basic_streambuf::p ubseekoff

Calls seekoff, uma função virtual protegida que é substituída em uma classe derivada.

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

Parâmetros

_Off
A posição a procurar em relação a _Way.

_Way
O ponto de partida para as operações de compensação. Consulte seekdir para valores possíveis.

_Which
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação.

Valor de retorno

Retorna a nova posição ou uma posição de fluxo inválida (seekoff(_ Off, _Way_Which, )).

Observações

Move o ponteiro em relação a _Way.

basic_streambuf::p ubseekpos

Chama seekpos, uma função virtual protegida que é substituída em uma classe derivada, e redefine a posição atual do ponteiro.

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

Parâmetros

_Sp
A posição a procurar.

_Which
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação.

Valor de retorno

A nova posição ou uma posição de fluxo inválida. Para determinar se a posição do fluxo é inválida, compare o valor de retorno com pos_type(off_type(-1)).

Observações

A função de membro retorna seekpos(_ Sp, _Which).

basic_streambuf::p Ubsetbuf

Chama setbuf, uma função virtual protegida que é substituída em uma classe derivada.

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

Parâmetros

_Buffer
Um ponteiro para char_type esta instanciação.

contagem
O tamanho do buffer.

Valor de retorno

Retorna setbuf(_Buffer, count).

basic_streambuf::p ubsync

Chama a sincronização, uma função virtual protegida que é substituída em uma classe derivada, e atualiza o fluxo externo associado a esse buffer.

int pubsync();

Valor de retorno

Retorna sincronização ou -1 em caso de falha.

basic_streambuf::sbumpc

Lê e retorna o elemento atual, movendo o ponteiro de fluxo.

int_type sbumpc();

Valor de retorno

O elemento atual.

Observações

Se uma posição de leitura estiver disponível, a função de membro retornará traits_type::to_int_type(*gptr) e incrementará o ponteiro seguinte para o buffer de entrada. Caso contrário, ele retorna uflow.

Exemplo

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

Uma função de membro virtual protegida que tenta alterar as posições atuais dos fluxos controlados.

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

Parâmetros

_Off
A posição a procurar em relação a _Way.

_Way
O ponto de partida para as operações de compensação. Consulte seekdir para valores possíveis.

_Which
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação.

Valor de retorno

Retorna a nova posição ou uma posição de fluxo inválida (seekoff (_ Off, _Way, _Which)).

Observações

A nova posição é determinada da seguinte forma:

  • Se _Way == ios_base::beg, a nova posição é o início do fluxo mais _ Off.

  • Se _Way == ios_base::cur, a nova posição é a posição do fluxo atual mais _ Off.

  • Se _Way == ios_base::end, a nova posição é o final do fluxo mais _ Off.

Normalmente, se qual & ios_base::in for diferente de zero, o fluxo de entrada será afetado e, se qual & ios_base::out for diferente de zero, o fluxo de saída será afetado. No entanto, o uso real desse parâmetro varia entre buffers de fluxo derivados.

Se a função conseguir alterar a posição ou posições do fluxo, ela retornará a posição do fluxo resultante ou uma das posições do fluxo resultante. Caso contrário, ele retorna uma posição de fluxo inválida. O comportamento padrão é retornar uma posição de fluxo inválida.

basic_streambuf::seekpos

Uma função de membro virtual protegida que tenta alterar as posições atuais dos fluxos controlados.

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

Parâmetros

_Sp
A posição a procurar.

_Which
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação.

Valor de retorno

A nova posição ou uma posição de fluxo inválida. Para determinar se a posição do fluxo é inválida, compare o valor de retorno com pos_type(off_type(-1)).

Observações

A nova posição é _ Sp.

Normalmente, se qual & ios_base::in for diferente de zero, o fluxo de entrada será afetado e, se qual & ios_base::out for diferente de zero, o fluxo de saída será afetado. No entanto, o uso real desse parâmetro varia entre buffers de fluxo derivados.

Se a função conseguir alterar a posição ou posições do fluxo, ela retornará a posição do fluxo resultante ou uma das posições do fluxo resultante. Caso contrário, ele retorna uma posição de fluxo inválida (-1). O comportamento padrão é retornar uma posição de fluxo inválida.

basic_streambuf::Setbuf

Uma função de membro virtual protegida que executa uma operação específica para cada buffer de fluxo derivado.

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

Parâmetros

_Buffer
Ponteiro para um buffer.

contagem
Tamanho do buffer.

Valor de retorno

O comportamento padrão é retornar this.

Observações

Ver basic_filebuf. setbuf Fornece uma área de memória para o streambuf objeto usar. Como o buffer é usado em definido nas classes derivadas.

basic_streambuf::setg

Uma função protegida que armazena _ Gbeg no ponteiro inicial, _Gnext no ponteiro seguinte e _Gend no ponteiro final para o buffer de entrada.

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

Parâmetros

_Gbeg
Um ponteiro para o início do buffer.

_Gnext
Um ponteiro para algum lugar no meio do buffer.

_Gend
Um ponteiro para o final do buffer.

basic_streambuf::setp

Uma função protegida que armazena _Pbeg no ponteiro inicial e _Pend no ponteiro final para o buffer de saída.

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

Parâmetros

_Pbeg
Um ponteiro para o início do buffer.

_Pend
Um ponteiro para o final do buffer.

basic_streambuf::sgetc

Retorna o elemento atual sem alterar a posição no fluxo.

int_type sgetc();

Valor de retorno

O elemento atual.

Observações

Se uma posição de leitura estiver disponível, a função de membro retornará traits_type::to_int_type(*gptr). Caso contrário, ele retorna underflow.

Exemplo

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

Extrai até para contar caracteres do buffer de entrada e os armazena no ptr de buffer fornecido.

Esse método é potencialmente inseguro, pois depende do chamador para verificar se os valores passados estão corretos.

streamsize sgetn(
    char_type* ptr,
    streamsize count);

Parâmetros

ptr
O buffer para conter os caracteres extraídos.

contagem
O número de elementos a ler.

Valor de retorno

O número de elementos lidos. Para obter mais informações, consulte streamsize para obter mais informações.

Observações

A função de membro retorna xsgetn(ptr, count).

Exemplo

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

Uma função de membro virtual protegida que retorna uma contagem do número de caracteres que podem ser extraídos do fluxo de entrada e garante que o programa não estará sujeito a uma espera indefinida.

virtual streamsize showmanyc();

Valor de retorno

O comportamento padrão é retornar zero.

basic_streambuf::snextc

Lê o elemento atual e retorna o seguinte elemento.

int_type snextc();

Valor de retorno

O próximo elemento no fluxo.

Observações

A função de membro chama sbumpc e, se essa função retornar traits_type::eof, retorna traits_type::eof. Caso contrário, ele retorna sgetc.

Exemplo

// 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 um char_type no fluxo.

int_type sputbackc(char_type _Ch);

Parâmetros

_Ch
O personagem.

Valor de retorno

Retorna o caractere ou falha.

Observações

Se uma posição de putback estiver disponível e _Ch for comparável ao caractere armazenado nessa posição, a função membro diminui o ponteiro seguinte para o buffer de entrada e retorna traits_type::to_int_type(_Ch). Caso contrário, ele retorna pbackfail(_Ch).

Exemplo

// 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 um personagem no fluxo.

int_type sputc(char_type _Ch);

Parâmetros

_Ch
O personagem.

Valor de retorno

Retorna o caractere, se for bem-sucedido.

Observações

Se um write position estiver disponível, a função de membro armazena _Ch na posição de gravação, incrementa o ponteiro seguinte para o buffer de saída e retorna traits_type::to_int_type(_Ch). Caso contrário, ele retorna overflow(_Ch).

Exemplo

// 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 uma cadeia de caracteres no fluxo.

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

Parâmetros

ptr
A cadeia de caracteres.

contagem
A contagem de caracteres.

Valor de retorno

O número de caracteres inseridos no fluxo.

Observações

A função de membro retorna xsputn(ptr, count). Para obter mais informações, consulte a seção Comentários deste membro para obter mais informações.

Exemplo

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

Passe pelo elemento atual no fluxo.

void stossc();

Observações

A função de membro chama sbumpc. Uma implementação não é necessária para fornecer essa função de membro.

Exemplo

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

Obtém um personagem do fluxo.

int_type sungetc();

Valor de retorno

Retorna o caractere ou a falha.

Observações

Se uma posição de putback estiver disponível, a função de membro diminui o ponteiro seguinte para o buffer de entrada e retorna traits_type::to_int_type(*gptr). No entanto, nem sempre é possível determinar o último caractere lido para que ele possa ser capturado no estado do buffer atual. Se isso for verdadeiro, a função retornará pbackfail. Para evitar essa situação, acompanhe o personagem para colocar de volta e chamar sputbackc(ch), o que não falhará desde que você não o chame no início do fluxo e não tente colocar de volta mais de um personagem.

Exemplo

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

Troca os valores neste objeto pelos valores no objeto fornecido basic_streambuf .

void swap(basic_streambuf& right);

Parâmetros

direito
Uma referência lvalue ao basic_streambuf objeto que é usado para trocar valores.

Observações

A função de membro protegido troca com direito todos os ponteiros que controlam o input buffer e o output buffer. Ele também troca right.getloc() com o locale objeto.

basic_streambuf::sync

Uma função virtual protegida que tenta sincronizar os fluxos controlados com quaisquer fluxos externos associados.

virtual int sync();

Valor de retorno

Se a função não for bem-sucedida, ela retornará -1. O comportamento padrão é retornar zero.

Observações

sync envolve a gravação de quaisquer elementos entre os ponteiros inicial e seguinte para o buffer de saída. Ele não envolve colocar de volta nenhum elemento entre os ponteiros seguinte e final para o buffer de entrada.

basic_streambuf::traits_type

Associa um nome de tipo ao parâmetro de modelo Tr .

typedef Tr traits_type;

basic_streambuf::uflow

Uma função virtual protegida que extrai o elemento atual do fluxo de entrada.

virtual int_type uflow();

Valor de retorno

O elemento atual.

Observações

A função de membro virtual protegido tenta extrair o elemento atual ch do fluxo de entrada, avançar a posição do fluxo atual e retornar o elemento como traits_type::to_int_type( ch). Pode fazê-lo de várias formas:

  • Se uma posição de leitura estiver disponível, ela tomará ch como o elemento armazenado na posição de leitura e avança o próximo ponteiro para o buffer de entrada.

  • Ele pode ler um elemento diretamente, de alguma fonte externa, e entregá-lo como o valor ch.

  • Para um buffer de fluxo com fluxos de entrada e saída comuns, ele pode disponibilizar uma posição de leitura gravando, em algum destino externo, alguns ou todos os elementos entre os ponteiros inicial e seguinte para o buffer de saída. Ou pode alocar armazenamento novo ou adicional para o buffer de entrada. A função então lê, de alguma fonte externa, um ou mais elementos.

Se a função não tiver êxito, ela retornará traits_type::eof ou lançará uma exceção. Caso contrário, ele retorna o elemento ch atual no fluxo de entrada, convertido conforme descrito acima, e avança o próximo ponteiro para o buffer de entrada. O comportamento padrão é chamar underflow e, se essa função retornar traits_type::eof, retornar traits_type::eof. Caso contrário, a função retorna o elemento atual ch no fluxo de entrada, convertido conforme descrito anteriormente, e avança o próximo ponteiro para o buffer de entrada.

basic_streambuf::fluxo inferior

Função virtual protegida para extrair o elemento atual do fluxo de entrada.

virtual int_type underflow();

Valor de retorno

O elemento atual.

Observações

A função de membro virtual protegida se esforça para extrair o elemento atual ch do fluxo de entrada, sem avançar a posição do fluxo atual, e devolvê-lo como traits_type::to_int_type( ch). Pode fazê-lo de várias formas:

  • Se uma posição de leitura estiver disponível, ch é o elemento armazenado na posição de leitura. Para obter mais informações, consulte a seção Comentários da classe basic_streambuf.

  • Ele pode disponibilizar uma posição de leitura alocando armazenamento novo ou adicional para o buffer de entrada e, em seguida, lendo, de alguma fonte externa, um ou mais elementos. Para obter mais informações, consulte a seção Comentários da classe basic_streambuf.

Se a função não tiver êxito, ela retornará traits_type::eof() ou lançará uma exceção. Caso contrário, ele retorna o elemento atual no fluxo de entrada, convertido conforme descrito anteriormente. O comportamento padrão é retornar traits_type::eof().

A função virtual underflow , com as funções de sincronização e estouro , define as características da streambufclasse derivada. Cada classe derivada pode implementar underflow de forma diferente, mas a interface com a classe de fluxo de chamada é a mesma.

A underflow função é mais frequentemente chamada por funções públicas streambuf como sgetc e sgetn quando a área get está vazia, mas outras classes, incluindo as classes stream, podem chamar underflow a qualquer momento.

A underflow função fornece a área get com caracteres da fonte de entrada. Se a área get contiver caracteres, underflow retornará o primeiro caractere. Se a área get estiver vazia, ela preenche a área get e retorna o próximo caractere (que deixa na área get). Se não houver mais caracteres disponíveis, retornará underflowEOF e deixará a área get vazia.

Na classe, strstreambuf ajusta o ponteiro underflow para acessar o armazenamento que foi alocado dinamicamente por uma chamada para overflow.

basic_streambuf::xsgetn

Função virtual protegida para extrair elementos do fluxo de entrada.

Esse método é potencialmente inseguro, pois depende do chamador para verificar se os valores passados estão corretos.

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

Parâmetros

ptr
O buffer para conter os caracteres extraídos.

contagem
O número de elementos a extrair.

Valor de retorno

O número de elementos extraídos.

Observações

A função de membro virtual protegida extrai elementos de contagem do fluxo de entrada, como se fosse por chamadas repetidas para sbumpc, e os armazena na matriz começando em ptr. Ele retorna o número de elementos extraídos.

basic_streambuf::xsputn

Função virtual protegida para inserir elementos no fluxo de saída.

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

Parâmetros

ptr
Ponteiro para os elementos a serem inseridos.

contagem
Número de elementos a inserir.

Valor de retorno

O número de elementos inseridos no fluxo.

Observações

A função de membro virtual protegido insere até contar elementos no fluxo de saída, como se fosse por chamadas repetidas para sputc, a partir da matriz que começa em ptr. A inserção de caracteres no fluxo de saída para quando todos os caracteres de contagem foram gravados ou se a chamada sputc( count) retornar traits::eof(). Ele retorna o número de elementos inseridos.

Ver também

segurança de threads na biblioteca padrão C++
Programação iostream
iostreams Convenções