Nel tentativo di comprendere meglio i flussi bufferizzati in C++, vorrei scrivere un semplice programma in cui il buffer std::cout
NON viene svuotato prima della conclusione. Da quando ho letto che std::cout
viene svuotato alla chiusura normale, ho provato a lanciare un errore di runtime. Ho anche evitato di usare std::endl
, poiché capisco che impone un flush. Primo tentativo:Come creare un semplice programma C++ in cui std :: cout non viene svuotato
//file noflush.cpp
#include <iostream>
int main() {
std::cout << "Don't write me to the console!";
throw 0;
}
compilazione con g ++, chiamata dal terminale:
$ ./noflush
libc++abi.dylib: terminating with uncaught exception of type int
Don't write me to the console!Abort trap: 6
Anche quando forzo un errore di runtime, sembra che il tampone viene ancora lavata al termine. È possibile "filare" alcuni dati nel buffer, lasciandolo non scritto sul dispositivo?
Solo per dire che anche quando abortire con 'std :: Abort()' il buffer si svuota, (utilizzando Apple LLVM versione 6.0 (clang-600.0.57) (basato su LLVM 3.5svn) con LLVM libC++), sebbene accor ding to [cppreference] (http: //en.cppreference.com/w/cpp/utility/program/abort) è l'implementazione definita * se le risorse aperte come i file sono chiuse * (alla chiamata 'std :: abort()'). – Walter