runInteractiveProcess and buffering

Henning Thielemann lemming at henning-thielemann.de
Sat Oct 13 12:56:32 EDT 2007


On Fri, 12 Oct 2007, Adam Langley wrote:

> On 10/12/07, Henning Thielemann <lemming at henning-thielemann.de> wrote:
>> The data of 'out' seems to be buffered, because 'aseqdump' must produce
>> many lines until even the first one is returned by 'hGetLine' and printed
>> by 'putStrLn'. I tried to disable buffering for 'out' and indeed
>> 'NoBuffering' is printed to the terminal, but the output from 'aseqdump'
>> is still deferred.
>
> [I suspect this is a job for haskell-cafe@, anyway]
>
> Are you sure that you aseqdump isn't buffering itself?

I'm not sure, I only see that it works when started in a terminal. However 
if I pipe it to 'less' then the output is deferred for a while. This seems 
to indicate that the C program actually buffers itself. :-(

> The standard C libraries will buffer output at the line level at least, 
> and are free to buffer much more than that if they think that the output 
> is not to a terminal.

Is this decision done automatically by C's standard library or must the C 
programmer do this manually? I couldn't find such a switch in the C 
program.


More information about the Libraries mailing list