A função setbuf () em C ++ define o buffer interno a ser usado para operações de E / S por um fluxo.
protótipo setbuf ()
void setbuf (FILE * stream, char * buffer);
Se o buffer não for nulo, é equivalente a chamar setvbuf (stream, buffer, _IOFBF, BUFSIZ).
Se o buffer for nulo, é equivalente a chamar setvbuf (stream, NULL, _IONBF, 0). Nesse caso, o armazenamento em buffer é desativado.
É definido no arquivo de cabeçalho.
Parâmetros setbuf ()
- stream: um stream de arquivo.
- buffer: um ponteiro para um buffer que pode ser nulo ou não. Se for nulo, o buffer está desativado, caso contrário, deve ter pelo menos BUFSIZ bytes.
setbuf () Valor de retorno
Nenhum
Os 2 exemplos abaixo ilustram o uso da função setbuf (). Ambos os programas usam a operação de arquivo. No primeiro exemplo, o buffer é definido usando setbuf () para armazenar o conteúdo do arquivo internamente.
No próximo exemplo, a instrução setbuf(fp, NULL)
desativa o armazenamento em buffer. Portanto, para ler o conteúdo do arquivo, fread () é usado.
Exemplo 1: como a função setbuf () funciona
#include #include using namespace std; int main () ( char str() = "Buffered Stream"; char buffer(BUFSIZ); FILE *fp; fp=fopen ("test.txt","wb"); setbuf(fp,buffer); fwrite(str, sizeof(str), 1, fp); fflush(fp); fclose(fp); cout << buffer; return 0; )
Quando você executa o programa, a saída será:
Buffered Stream
Exemplo 2: função setbuf () com buffer desativado
#include #include using namespace std; int main () ( char str() = "Unbuffered Stream"; char strFromFile(20); FILE *fp; fp=fopen ("test.txt","wb+"); setbuf(fp,NULL); fwrite(str, sizeof(str), 1, fp); fflush(fp); /* We need to rewind the file pointer and read the file because the data from test.txt isn't saved in any buffer */ rewind(fp); fread(strFromFile, sizeof(strFromFile), 1, fp); fclose(fp); cout << strFromFile; return 0; )
Quando você executa o programa, a saída será:
Fluxo sem buffer