In article <news: om>
Paul Barker <> wrote:
>Eg. On linux console, by default: stdin, stdout and stderr all refer
>to the current console.
But it will not matter there, because:
>Although I don't know much about the standards, I'm guessing undefined
>behaviour here.
The C standard leaves it undefined. This allows other systems to
impose behavior upon it, if they choose.
The POSIX standard says that fflush() on an input-mode stream has
the effect of synchronizing the lseek() offset on the underlying
file descriptor (which only matters for regular files, not devices),
without doing any other "flushing". A call to fflush(stdin) must
therefore NOT discard ANY data.
>If stdin refers to a file that can be written to, you
>would flush whatever has been to this file.
This is not right (but not wrong either, it just makes no sense at
all): the fflush() operation will inspect the stdio stream, see
that the stream is in "read" mode, and lseek() the underlying file
descriptor, which may or may not be shared with other processes'
file descriptor(s) for the same underlying file. (The only reason
to do this kind of lseek() call is if it *is* in fact shared,
in particular after a POSIX fork().) The call will not even attempt
to find other stdio streams that might refer to the same file,
especially since they are most likely to be inside another process
entirely, and thus unreachable.
--
In-Real-Life: Chris Torek, Wind River Systems
Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
email: forget about it
http://web.torek.net/torek/index.html
Reading email is like searching for food in the garbage, thanks to spammers.