stdin input availability (race condition?)
Inter-process communication exists independently of the shell. Standard in and standard out are operating-system mechanisms which the shell uses, but does not create. Processes that are not shells use them all the time.
I do not know enough about the specification for the available()
method, but if you perform a quick check on Windows and it works, the rest of the OSes being mostly UNIX-style, there is, I think, a high likelihood that it will work everywhere.