I agree: cout << endl should flush the buffer. It does when stdout is a
tty. For some reason, the buffering becomes much more aggressive when the
stdout is a pipe.


On Fri, Aug 22, 2014 at 6:14 AM, Juergen Sauermann <
juergen.sauerm...@t-online.de> wrote:

>  Hi David,
>
> thanks, included in SVN 443.
>
> This is interesting because I normally use something like *out << endl *which
> should have flushed the buffer.
> On the other hand *⍞* is somewhat special because it prints a prompt but
> no *endl* so that the user enters her input
> on the same line.
>
> I have added a few *cout << flush* for* ⎕/⍞ *so maybe the patch isn't
> needed anymore (I guess unbuffered output
> is slightly slower than buffered output).
>
> /// Jürgen
>
>
>  On 08/22/2014 05:11 AM, David Lamkins wrote:
>
>  Oops. Here's the same patch, but inquiring about the correct file
> descriptor.
>
>  (It'll work either way in some cases...)
>
>
>  On Thu, Aug 21, 2014 at 8:06 PM, David Lamkins <da...@lamkins.net> wrote:
>
>>  I've been puzzled by the interaction between GNU APL and aplwrap, in
>> which ⎕ and ⍞ output doesn't appear until APL prompts for input. This
>> behavior is bad for the case where the program tries to emit periodic
>> progress messages during long computations.
>>
>> It turns out that the C++ std lib is responsible for this behavior. While
>> cerr is unbuffered, cout holds onto buffered content for as long as
>> possible. (Apparently it only does this when stdout is not a terminal, as
>> running the same test in a shell window does not exhibit the aggressive
>> buffering behavior.)
>>
>>  I learned that cout's buffering behavior can be be changed using the
>> call:
>>
>>  std::cout.setf(std::ios::unitbuf);
>>
>>  This can be called sometime before running the main APL loop, and will
>> cause cout's buffer to be flushed at each <<, the same as cerr.
>>
>>  The attached patch (GNU APL SVN 441) runs the 'unitbuf' code only in
>> the case that stdin is not a tty.
>>
>>
>>
>> --
>>  "The secret to creativity is knowing how to hide your sources."
>>    Albert Einstein
>>
>>
>> http://soundcloud.com/davidlamkins
>> http://reverbnation.com/lamkins
>> http://reverbnation.com/lcw
>> http://lamkins-guitar.com/
>> http://lamkins.net/
>> http://successful-lisp.com/
>>
>
>
>
> --
>  "The secret to creativity is knowing how to hide your sources."
>    Albert Einstein
>
>
> http://soundcloud.com/davidlamkins
> http://reverbnation.com/lamkins
> http://reverbnation.com/lcw
> http://lamkins-guitar.com/
> http://lamkins.net/
> http://successful-lisp.com/
>
>
>


-- 
"The secret to creativity is knowing how to hide your sources."
   Albert Einstein


http://soundcloud.com/davidlamkins
http://reverbnation.com/lamkins
http://reverbnation.com/lcw
http://lamkins-guitar.com/
http://lamkins.net/
http://successful-lisp.com/

Reply via email to