bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ordering of printed lines changes when redirecting


From: Pádraig Brady
Subject: Re: ordering of printed lines changes when redirecting
Date: Mon, 18 Jul 2016 17:32:33 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0

On 18/07/16 14:59, Greg Wooledge wrote:
> On Mon, Jul 18, 2016 at 10:22:46AM +0200, walter harms wrote:
>>  ( ./a.out 2>&1 )
>> hallo 5
>> hallo 6
>> hallo 7
>> hallo 8
>> hallo 9
> 
> (snip)
> 
>> ./a.out  >xx 2>&1
>>  cat xx
>> hallo 6
>> hallo 8
>> hallo 5
>> hallo 7
>> hallo 9
> 
> Looks like an artifact of stdio (libc) buffering.  When stdout and
> stderr are going to a terminal (first example), you get line buffering
> (flushed after each newline), and thus the order you expect.  When stdout
> and stderr are going to a file, you get much larger buffers.  Looks like
> the flush happens implicitly when the program exits.  In your second
> example here, you happen to get all of the stderr lines first, followed
> by all of the stdout lines.
> 
> See if the behavior changes when you add these lines to the start of
> the C program:
> 
> setvbuf(stdout, NULL, _IOLBF, 0);
> setvbuf(stderr, NULL, _IOLBF, 0);

One might be able to control from outside the program as well like:

stdbuf -oL your_prog




reply via email to

[Prev in Thread] Current Thread [Next in Thread]