Witam, ostatnio zaciekawił mnie fakt, w jaki sposób wyjście programu (używając iostream) jest buforowane. Wejście oczywiste, do napotkania znaku nowej lini lub przepełnienia bufora, w przypadku plików też zdaje się to być proste, ale w przypadku wyjścia standardowego jest dziwnie. Napisałem oto krótki programik, który pokazuje tą różnice:
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
// zamraża program na n sekund
void wait (int n)
{
time_t time1=clock();;
time_t time2=clock();
while ((time2-time1)/CLOCKS_PER_SEC < n )
{
time2=clock();
continue;
}
};
int main (void)
{
ofstream plik;
plik.open("test.txt");
cout<<"siema";
plik<<"siema";
wait(10);
plik<<endl;
cout<<endl<<"KONIEC"<<endl;
cin.get();
cin.get();
return 0;
}
Pokazuje on, że używając wyjścia "cout" buforowanie jakby nie istniało, dane są wyświetlone natychmiast. Używając natomiast strumienia plikowego, buforowanie działa jak należy, w tym przypadku opróżniony zostaje bufor po wysłaniu znaku nowej lini. W przypadku cout, bufor zostaje opróżniony od razu, przez wysłaniem znaku nowej lini. Może jestem zbyt ciekawski, ale mógłby mi ktoś to wytłumaczyć ?:)