Also, ich finde es gut, Dateien, Sockets, Pipes, Terminals usw. über I/O Streams anzusprechen. Bei shared memory, Treibern(/dev/) usw. macht das IMHO überhaupt keinen Sinn. Geräte/Komponenten die in etwa das gleiche machen, sollten über die selbe Schnittstelle ansprechbar sein. Andere Resourcen wie shared memory, sollten nicht über dasselbe Interface angesprochen werden.
Windows hat eigene API Funktionen, um auf die Konsole zu schreiben und von ihr zu lesen.