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
stream
Ponteiro para a estrutura FILE
.
buffer
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 size
é arredondado para baixo até o múltiplo mais próximo de 2.
Valor retornado
Retorna 0 se for bem-sucedido.
Se stream
for NULL
ou se mode
estiver ou size
não 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, confira errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Comentários
A função setvbuf
permite que o programa controle o buffer e o tamanho do buffer para stream
. stream
deve se referir a um arquivo aberto que não passou por uma operação de E/S desde que foi aberto. A matriz apontada por buffer
é usada como buffer, a menos buffer
que seja NULL
, caso setvbuf
em que usa um buffer alocado automaticamente de comprimento size
/2 * 2 bytes.
O modo deve ser _IOFBF
, _IOLBF
ou _IONBF
. Se mode
é _IOFBF
ou _IOLBF
, size
é usado como o tamanho do buffer. Se mode
for _IONBF
, o fluxo não é armazenado em buffer e ambos size
são buffer
ignorados. Valores de mode
e seus significados são:
mode valor |
Significado |
---|---|
_IOFBF |
Buffer completo; ou seja, buffer é usado como o buffer e size é usado como o tamanho do buffer. Se buffer for NULL , esse modo usa um buffer alocado automaticamente com bytes de size comprimento. |
_IOLBF |
Para alguns sistemas, esse modo fornece buffer de linha. No entanto, para o Win32, o comportamento é o mesmo que _IOFBF – buffer completo. |
_IONBF |
Nenhum buffer é usado, independentemente de buffer ou size . |
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Requisitos
Rotina | Cabeçalho necessário |
---|---|
setvbuf |
<stdio.h> |
Para obter 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