Função da biblioteca C - setvbuf ()

Descrição

A função da biblioteca C int setvbuf(FILE *stream, char *buffer, int mode, size_t size) define como um fluxo deve ser armazenado em buffer.

Declaração

A seguir está a declaração da função setvbuf ().

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

Parâmetros

  • stream - Este é o ponteiro para um objeto FILE que identifica um fluxo aberto.

  • buffer- Este é o buffer alocado pelo usuário. Se definida como NULL, a função aloca automaticamente um buffer do tamanho especificado.

  • mode - Isso especifica um modo para buffer de arquivo -

Sr. Não. Modo e descrição
1

_IOFBF

Full buffering- Na saída, os dados são gravados quando o buffer está cheio. Na entrada, o buffer é preenchido quando uma operação de entrada é solicitada e o buffer está vazio.

2

_IOLBF

Line buffering- Na saída, os dados são gravados quando um caractere de nova linha é inserido no fluxo ou quando o buffer está cheio, o que acontecer primeiro. Na entrada, o buffer é preenchido até o próximo caractere de nova linha quando uma operação de entrada é solicitada e o buffer está vazio.

3

_IONBF

No buffering- Nenhum buffer é usado. Cada operação de E / S é gravada o mais rápido possível. Os parâmetros de buffer e tamanho são ignorados.

  • size - Este é o tamanho do buffer em bytes

Valor de retorno

Esta função retorna zero em caso de sucesso, caso contrário, um valor diferente de zero é retornado.

Exemplo

O exemplo a seguir mostra o uso da função setvbuf ().

#include <stdio.h>

int main () {
   char buff[1024];

   memset( buff, '\0', sizeof( buff ));

   fprintf(stdout, "Going to set full buffering on\n");
   setvbuf(stdout, buff, _IOFBF, 1024);

   fprintf(stdout, "This is tutorialspoint.com\n");
   fprintf(stdout, "This output will go into buff\n");
   fflush( stdout );

   fprintf(stdout, "and this will appear when programm\n");
   fprintf(stdout, "will come after sleeping 5 seconds\n");

   sleep(5);

   return(0);
}

Vamos compilar e executar o programa acima para produzir o seguinte resultado. Aqui o programa continua armazenando a saída embuffaté que enfrente a primeira chamada para fflush (), após o que começa novamente a armazenar a saída em buffer e, finalmente, dorme por 5 segundos. Ele envia a saída restante para o STDOUT antes que o programa seja lançado.

Going to set full buffering on
This is tutorialspoint.com
This output will go into buff
and this will appear when programm
will come after sleeping 5 seconds