On 2011-07-20 14:34 +0100, Ralph Corderoy wrote:

> No.  Here's my understanding of how it currently works.  The built-in
> printf works out a character to print at a time;  no foresight needed or
> used.  It asks the C library to print it with putchar(3).  The C library
> can implement buffering to avoid too many expensive write(2) system
> calls.  bash has the C library buffer stdout by lines.  Each time
> putchar(3) is called the character is appended to the buffer.  If the
> character was '\n' or the buffer is now full then write(2) is called to
> pass the buffer to the kernel and the buffer then treated as empty.
> 
> When printf is finished the buffer is flushed, e.g. if there's anything
> in it then write(2) is called.
> 
> The C library provides two other modes of buffering, see setvbuf(3).
> bash could easily detect that stdout is a regular file, have a new
> stream be duplicated from file descriptor 1, and set it to
> block-buffered.

If standard output is a log file, log entries could remain
latent for a very long time.

The buffering mode we really want is buffered with a forced
flush at reasonable intervals, E.G. one second after the last
write. Unfortunately, there's no such thing in stdio.

-- 
André Majorel http://www.teaser.fr/~amajorel/

Reply via email to