In said:
is using _IONBF with setvbf the general way of getting
an unbuffered stream in a standardized way? or are system
specific functions generally favored over c89's setvbuf?
You're confused. There are multiple buffering levels on most hosted
platforms. setvbuf controls the buffering performed at the level of the
<stdio.h> functions and there is no other alternative (except for setbuf,
which is a less flexible setvbuf). The OS itself typically performs its
own buffering, and this buffering is controlled with system specific
functions. Some devices also do their own buffering and this buffering
may not be controllable by the application code.
This explains why, on many platforms, even if stdin buffering is
turned off with setvbuf, reading from stdin still blocks until the
newline key is pressed (assuming that stdin is connected to the
controlling terminal).
Dan