setbuf <STDIO.H>
setvbuf <STDIO.H>
Składnia:
      void setbuf(FILE *stream, char *bufor);
      int setvbuf(FILE *stream, char *bufor, int typ, size_t wielkość);

gdzie:
stream - wskaźnik do strumienia, dla którego przydzielamy bufor.
bufor - wskaźnik do bufora używane do operacji wejścia-wyjścia dla strumienia. Używany jest dopiero po otworzeniu strumienia.
typ - typ buforowanie:
  • 0 - pełne buforowanie
  • 1 - buforowanie tekstowe (do znaku nowego wiersza)
  • 2 - bez buforowania.
wielkość - wielkość bufora w bajtach: 0 < wielkość < 32 767.

Opis
setbuf przypisuje bufor użytkownika zamiast systemowego dla strumieni otwartych do buforowanych operacji wejścia-wyjścia. Przydzielony bufor musi mieć wielkość BUFSIZ. Jeżeli wskaźnik do bufora ma wartość NULL, to funkcja setbuf wyłącza buforowanie dla strumienia. Wywołanie funkcji przed otwarciem strumienia powoduje nieprzewidywalny rezultat.
setvbuf przypisuje bufor użytkownika o wyznaczonym rozmiarze zamiast systemowego dla strumieni otwartych do buforowanych operacji wejścia-wyjścia. Może służyć do kontrolowania typu lub całkowitego wyłączenia buforowania strumienia. Wywołanie funkcji przed otwarciem strumienia powoduje nieprzewidywalny rezultat.
W przypadku obu funkcji należy pamiętać, że wskaźnik do bufora musi być zmienna publiczna lub wszystkie operacje związane z buforem muszą być zakończone wewnątrz funkcji, w której zmienna została zadeklarowana jako prywatna.

Zwracana wartość:

    setbuf nie zwraca żadnej wartości
    warość zwracana przez setvbuf:
  • powodzenie - zero;
  • błąd - wartość różna od 0.

Przykład setbuf:


#include <stdio.h>
#include <conio.h>

char bufor[BUFSIZ]; // zmienna przeznaczona na bufor

int main(void)
{ setbuf(stdout, bufor); // przydzielenie bufora do stdout

/* przesłanie tekstów do bufora */
puts("Pierwszy wiersz tekstu.\n\r");
puts("Drugi wiersz tekstu.\n\r");
puts("Trzeci wiersz tekstu.\n\r");
puts("Czwarty wiersz tekstu.\n\r");
getch(); // ekran wciąż jest pusty

fflush(stdout); // opróżnienie bufora

return 0;
}

Przykład setvbuf:


#include <stdio.h>
#include <conio.h>

char bufor[1024]; // zmienna przeznaczona na bufor

int main(void)
{ setvbuf(stdout, bufor, 0, 1024); // pełne buforowanie stdout

/* przesłanie tekstów do bufora */
puts("Pierwszy wiersz tekstu.\r\n");
puts("Drugi wiersz tekstu.\r\n");
puts("Trzeci wiersz tekstu.\r\n");
puts("Czwarty wiersz tekstu.\r\n");
getch(); // ekran wciąż jest pusty

fflush(stdout); // opróżnienie bufora

setvbuf(stdout, bufor, 1, 80); // buforowanie wierszy stdout

/* przesłanie tekstów do bufora */
printf("Pierwszy tekst. ");
getch();
printf("Drugi tekst.\r\n");
getch();
printf("Trzeci tekst. ");
getch();
printf("Czwarty tekst.\r\n");
getch();

return 0;
}