setbuf, setvbuf, setbuffer ou setlinebuf Subroutine
Propósito
Atribui buffering a um fluxo.
Biblioteca
Biblioteca C Padrão (libc.a)
Sintaxe
Descrição
O subroutine setbuf faz com que a matriz de caracteres apontada pelo parâmetro Buffer seja usada em vez de um buffer alocado automaticamente. Use a subroutinha setbuf depois que um fluxo foi aberto, mas antes de ser lido ou escrito.
Se o parâmetro Buffer for um ponteiro de caracteres nulo, a input/output é completamente sem buffer.
Uma constante, BUFSIZ, definida no arquivo stdio.h , informa o quão grande uma matriz é necessária:
char buf[BUFSIZ];Para o subroutine setvbuf , o parâmetro Mode determina como o parâmetro Stream é buffered:
| Item | Descrição |
|---|---|
| _IOFBF | Faz com que o input/output seja totalmente bufferado. |
| _IOLBF | Faz com que a saída seja linha-tampão. O buffer é flushed quando uma nova linha é escrita, o buffer está cheio, ou a entrada é solicitada. |
| _IONBF | Faz com que a input/output seja completamente destampada. |
Se o parâmetro Buffer não for um ponteiro de caractere nulo, a matriz que ele aponta é usada para buffering. O parâmetro Tamanho especifica o tamanho da matriz que é usada como um buffer, mas todos os bytes do parâmetro Tamanho não são necessariamente usados para a área de buffer. Alguns bytes do buffer são usados para o gerenciamento de buffer interno. Se o valor especificado do parâmetro Size for menor do que o valor necessário para gerenciamento de buffer interno, o setvbuf e as subroutines setbuffer ignoram o buffer especificado e executam uma alocação interna de buffer.
A constante BUFSIZ no arquivo stdio.h é um tamanho de buffer. Se a entrada ou saída for destampada, a subroutine setbuf ignora os parâmetros Buffer e Size . O subroutine setbuffer que é uma forma alternativa do subroutine setbuf , é usado depois que o Stream é aberto, mas antes de ser lido ou escrito. O tamanho da matriz de caracteres Buffer é determinado pelo parâmetro Size . A matriz de caracteres Buffer é usada em vez de um buffer alocado automaticamente. Se o parâmetro Buffer for um ponteiro de caractere nulo, a entrada ou saída é completamente destampada.
A subroutina setbuffer não é necessária em circunstâncias normais porque o tamanho do buffer de E/S de arquivo padrão é o ideal.
O subroutine setlinebuf é usado para alterar o arquivo stdout ou stderr do bloco buffered ou unbuffered to line-buffered. Ao contrário das subroutines setbuf e setbuffer , a subroutine setlinebuf pode ser usada qualquer vez que o Stream estiver ativo.
Um buffer é normalmente obtido a partir da subroutine malloc no momento da primeira subroutine getc ou subroutine putc no arquivo, exceto que o fluxo de erro padrão, stderr, normalmente não é buffered.
Os fluxos de saída direcionados aos terminais são sempre de linha-buffered ou sem buffer.
As subroutines setbuffer e setlinebuf estão incluídas para compatibilidade com o Berkeley System Distribution (BSD).
Parâmetros
| Item | Descrição |
|---|---|
| Fluxo | Especifica o fluxo de entrada / saída. |
| de Saída | Aponta para uma matriz de caracteres. |
| Modo | Determina como o parâmetro Stream é buffered. |
| Tamanho | Especifica o tamanho do buffer a ser utilizado. |
Exemplo:
#include <stdio.h>
#define SIZE 1024
int main(void)
{
FILE *fp1;
char buf[SIZE];
memset( buf, '\0', sizeof( buf ));
fp1 = fopen("file1", "r");
/* Error Handling for fopen */
if (setvbuf(fp1, buf, _IOFBF, SIZE) != 0)
printf("Not proper data provided to setvbuf\n");
if (fclose(fp1))
perror("fclose error");
}
Valores De Retorno
Após a conclusão bem-sucedida, setvbuf retorna um valor de 0. Caso contrário, ele retorna um valor não zero se um valor que não for válido for dado para o tipo, ou se o pedido não puder ser honrado.