setvbuf

Controla o tamanho do buffer e o buffer de fluxo.

Sintaxe

int setvbuf(
   FILE *stream,
   char *buffer,
   int mode,
   size_t size
);

Parâmetros

fluxo
Ponteiro para a estrutura FILE.

completo
Buffer alocado pelo usuário.

mode
Modo de buffer.

size
O tamanho do buffer, em bytes. Intervalo permitido: 2 < = size< = INT_MAX (2147483647). Internamente, o valor fornecido para o tamanho é arredondado para baixo até o múltiplo mais próximo de 2.

Valor Retornado

Retorna 0 se for bem-sucedido.

Se o fluxo for nulo, ou se o modo ou o tamanho não estiver dentro de uma alteração válida, o manipulador de parâmetro inválido será invocado, conforme descrito em validação de parâmetro. Se a execução puder continuar, essa função retornará um valor -1 e definirá errno como EINVAL.

Para obter informações sobre esses e outros códigos de erro, consulte _doserrno, errno, _sys_errlist e _sys_nerr.

Comentários

A função setvbuf permite que o programa controle o buffer e o tamanho do buffer para o fluxo. o fluxo deve se referir a um arquivo aberto que não passou por uma operação de e/s desde que ele foi aberto. A matriz apontada por buffer é usada como buffer, a menos que seja nula, caso em que setvbuf usa um buffer alocado automaticamente de tamanho/2 * 2 bytes.

O modo deve ser _IOFBF, _IOLBFou _IONBF. Se o modo for _IOFBF ou _IOLBF, o tamanho será usado como o tamanho do buffer. Se o modo for _IONBF, o fluxo será sem buffer e o tamanho e o buffer serão ignorados. Os valores para o modo e seus significados são:

valor de modo Significado
_IOFBF Buffer completo; ou seja, o buffer é usado como o buffer e o tamanho são usados como o tamanho do buffer. Se o buffer for nulo, será usado um tamanho de buffer atribuído automaticamente com comprimento de bytes.
_IOLBF Para alguns sistemas, isso fornece buffer em linha. No entanto, para o Win32, o comportamento é o mesmo que _IOFBF buffer completo.
_IONBF Nenhum buffer é usado, independentemente do buffer ou do tamanho.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar isso, consulte estado global no CRT.

Requisitos

Rotina Cabeçalho necessário
setvbuf <stdio. h>

Para obter mais informações sobre compatibilidade, consulte Compatibilidade.

Bibliotecas

Todas as versões das bibliotecas em tempo de execução C.

Exemplo

// crt_setvbuf.c
// This program opens two streams: stream1
// and stream2. It then uses setvbuf to give stream1 a
// user-defined buffer of 1024 bytes and stream2 no buffer.
//

#include <stdio.h>

int main( void )
{
   char buf[1024];
   FILE *stream1, *stream2;

   if( fopen_s( &stream1, "data1", "a" ) == 0 &&
       fopen_s( &stream2, "data2", "w" ) == 0 )
   {
      if( setvbuf( stream1, buf, _IOFBF, sizeof( buf ) ) != 0 )
         printf( "Incorrect type or size of buffer for stream1\n" );
      else
         printf( "'stream1' now has a buffer of 1024 bytes\n" );
      if( setvbuf( stream2, NULL, _IONBF, 0 ) != 0 )
         printf( "Incorrect type or size of buffer for stream2\n" );
      else
         printf( "'stream2' now has no buffer\n" );
      _fcloseall();
   }
}
'stream1' now has a buffer of 1024 bytes
'stream2' now has no buffer

Confira também

E/S de fluxo
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf