你真的不知道.TTY(控制台)是一个非常有限的设备,你几乎不做非阻塞I/O.当你看到一些看起来像非阻塞I/O的东西时,比如在curses/ncurses应用程序中,你所做的事情被称为raw I/O.在原始I/O中,没有对字符的解释,没有擦除处理等.相反,您需要编写自己的代码,在执行其他操作时判断数据.
在现代C程序中,您可以通过另一种方式简化这一点,将控制台I/O放入thread或轻量级进程中.然后,I/O可以以通常的阻塞方式进行,但数据可以插入到队列中,在另一个线程上进行处理.
这里有一个curses tutorial,涵盖了更多.