RSS | technovelty home | page of ian | ianw@ieee.org
When you know about buffering it's trivial, but when you don't you can get some very unexpected behaviour from UNIX.
For example, the following program will print nothing.
#includeint main(void) { printf("hello world"); while (1) sleep(1); }
This is because by default your stdout stream (which printf uses)
will be in line buffering mode, where output will not be
printed until a newline (\n) is seen.
You can either add the newline (as was probably intended, but it's
an easy enough thing to leave off!) or manually call
fflush to flush the buffer.
There are three buffer modes available; unbuffered,
line and block buffered. You can access them with the
setbuf call. Unbuffered is the default for
stderr, while your tty by default takes on line
buffering. Anything connected to a block device (e.g. a file on a
disk, or pipes) take on block buffering, where the best amounts of
data for the device are written at once.
But essentially, if your output is missing check for those newlines!
posted at: Fri, 26 Aug 2005 23:51 | in /code/c | permalink | add comment (0 others)

This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.